Сложить данные из объектов с одинаковым значением

194
13 июля 2017, 02:32

Есть вот такой массив:

[{
        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

Answer 1

Группировка по 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]);

Answer 2

Вариант с 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]}`); 
})

READ ALSO
JavaScript для формы

JavaScript для формы

Есть форма:

181
Обновление переменной из сокета

Обновление переменной из сокета

Есть код который складывает данные из массивов

171
Почему не входит в чат?

Почему не входит в чат?

Есть такой код:

190
Перехват js события в WKWebView

Перехват js события в WKWebView

Добрый день! Пытаюсь перехватить ЛЮБОЕ onclick событие в WKWebViewВесь сайт работает посредством js запросов, так что в func webView(_ webView: WKWebView, decidePolicyFor...

175