Вы можете использовать Array.prototype.reduce
для этого.
Чтобы сделать его немного более гибким и динамичным c, создайте Set
ключей, для которых вы хотите получить счет.
Затем go через каждый ключ в Set
, и если этот ключ находится в obj
, суммируйте его в объекте accumulator
в обратном вызове Reduce:
const data = [{"name":"Dave","coins":14,"weapons":2,"otherItems":3,"color":"red"},{"name":"Vanessa","coins":18,"weapons":1,"otherItems":5,"color":"blue"},{"name":"Sharon","coins":9,"weapons":5,"otherItems":1,"color":"pink"},{"name":"Walter","coins":9,"weapons":2,"otherItems":4,"color":"white"}]
//Keys to count
const keys = new Set(["coins", "weapons", "otherItems"]);
const count = data.reduce((acc, obj) => {
const objKeys = keys.forEach(key => {
if (obj.hasOwnProperty(key)) {
acc[key] = (acc[key] || 0) + obj[key];
}
});
return acc;
}, {});
console.log(count);