Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вычисляемое значение ключа в объект (https://javascript.ru/forum/misc/82062-vychislyaemoe-znachenie-klyucha-v-obekt.html)

AlexandrDr 07.03.2021 12:16

Вычисляемое значение ключа в объект
 
Здравствуйте.

Буду очень признателен, если подскажете в какую сторону копать или может дадите решение моей проблемы

Есть массив объектов:

[{
fio: "Меремьянина Наталья Владимировна",
level: "Рыцарь",
exp: 1600,
money: 100
},
{
fio: "Матюшенок Юлия Олеговна",
level: "Рыцарь",
exp: 1500,
money: 100
},
{
fio: "Подгорнова Евгения Юрьевна",
level: "Рыцарь",
exp: 1500,
money: 100
},
{
fio: "Гуреева Маргарита Валерьевна",
level: "Рыцарь",
exp: 1500,
money: 100
},
{
fio: "Мелядин Павел Сергеевич",
level: "Ветеран",
exp: 1450,
money: 200
}]


Мне необходимо в каждый объект добавить ключ со значением занимаемого места. Место вычисляется по ключам exp и money. Если у нескольких объектов значения money и exp одинаковые, то место должно быть одно

Должно получиться так:

[{
place: 1,
fio: "Меремьянина Наталья Владимировна",
level: "Рыцарь",
exp: 1600,
money: 100
},
{
place: 2,
fio: "Матюшенок Юлия Олеговна",
level: "Рыцарь",
exp: 1500,
money: 100
},
{
place: 2,
fio: "Подгорнова Евгения Юрьевна",
level: "Рыцарь",
exp: 1500,
money: 100
},
{
place: 2,
fio: "Гуреева Маргарита Валерьевна",
level: "Рыцарь",
exp: 1500,
money: 100
},
{
place: 3,
fio: "Мелядин Павел Сергеевич",
level: "Ветеран",
exp: 1450,
money: 200
}]


Заранее благодарю за любую помощь!

рони 07.03.2021 12:40

AlexandrDr,
<script>
            let ar = [{
                            fio: "Меремьянина Наталья Владимировна",
                            level: "Рыцарь",
                            exp: 1600,
                            money: 100
                    },
                    {
                            fio: "Матюшенок Юлия Олеговна",
                            level: "Рыцарь",
                            exp: 1500,
                            money: 100
                    },
                    {
                            fio: "Подгорнова Евгения Юрьевна",
                            level: "Рыцарь",
                            exp: 1500,
                            money: 100
                    },
                    {
                            fio: "Гуреева Маргарита Валерьевна",
                            level: "Рыцарь",
                            exp: 1500,
                            money: 100
                    },
                    {
                            fio: "Мелядин Павел Сергеевич",
                            level: "Ветеран",
                            exp: 1450,
                            money: 200
                    }
            ];
            ar.reduce((a, b) => {
                    let { exp, money } = b;
                    if (!a[[exp, money]]) a[[exp, money]] = ++a.count;
                    b.place = a[[exp, money]];
                    return a
            }, { count: 0 });
            document.write(`<pre>${JSON.stringify(ar, "", 2)}</pre>`)
    </script>

AlexandrDr 08.03.2021 21:53

рони,
Огромное вам спасибо!


Часовой пояс GMT +3, время: 19:19.