Есть вот такой массив:
[{
id: 100,
chance: 10
},
{
id: 100,
chance: 30
},
{
id: 200,
chance: 10
},
{
id: 300,
chance: 5
},
{
id: 200,
chance: 30
},
{
id: 100,
chance: 15
}
]
Как сделать цикл, чтобы возвращал он подобное:
id:100 chance: 55 (10+30+15 выводить не надо)
id:200 chance: 40 (10+30 выводить не надо)
id:300 chance: 5
Нужно чтобы цикл складывал chance у объектов с одинаковым id
Группировка по id с помощью объекта и вывод на экран id + chance:
var data = [{ id: 100, chance: 10 }, { id: 100, chance: 30 }, { id: 200, chance: 10 },
{ id: 300, chance: 5 }, { id: 200, chance: 30 }, { id: 100, chance: 15 }];
var result = {};
for (var element of data)
{
if (result[element.id] == undefined)
result[element.id] = 0;
result[element.id] += element.chance;
}
for (var id in result)
console.log("id: " + id + ", chance: " + result[id]);
Вариант с reduce, впрочем, принципиально он ничем не отличается от ответа Regent
let data = [{
id: 100,
chance: 10
},
{
id: 100,
chance: 30
},
{
id: 200,
chance: 10
},
{
id: 300,
chance: 5
},
{
id: 200,
chance: 30
},
{
id: 100,
chance: 15
}
];
let result = data.reduce((prev, item) => {
if (item.id in prev) {
prev[item.id] += item.chance
} else {
prev[item.id] = item.chance;
}
return prev;
}, {})
Object.keys(result).forEach(id => {
console.log(`id:${id}, chance:${result[id]}`);
})
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости