在对象数组中查找重复项javascript

我有一个对象数组,如下所示:

{value: 20, color: 'F88C00'}, {value: 40, color: 'D8605F'}, {value: 20, color: '72C380'}, {value: 20, color: '2C7282'}, {value: 20, color: '72C380'} 

我想使用javascript / jquery循环遍历它们以检查颜色列中是否有任何重复项,如果有重复项,则此处“72C380”出现两次。 然后应该只有一个条目,但它们的值应该相加。

期望的输出:

  {value: 20, color: 'F88C00'}, {value: 40, color: 'D8605F'}, **{value: 40, color: '72C380'},** {value: 20, color: '2C7282'} 

我知道如何在python中做到这一点,但不知道JS

你可以像这样使用临时地图

 var array = [{ value: 20, color: 'F88C00' }, { value: 40, color: 'D8605F' }, { value: 20, color: '72C380' }, { value: 20, color: '2C7282' }, { value: 20, color: '72C380' }]; var op = [], map = {}, it, item; for (var i = 0; i < array.length; i++) { it = array[i]; item = map[it.color]; if (item) { item.value += it.value; } else { map[it.color] = item = { value: it.value, color: it.color }; op.push(item); } } console.log(op) 

演示: 小提琴

控制它…

 var collection = [{value: 20, color: 'F88C00'}, {value: 40, color: 'D8605F'}, {value: 20, color: '72C380'}, {value: 20, color: '2C7282'}, {value: 20, color: '72C380'}]; var colors = []; var result = collection; $.each(result, function(i, item){ if(colors.indexOf(item.color)!= -1){ $.each(result,function(f, find){ if(find.color == item.color){ result[f].value += item.value; } }) delete result[i]; }else{ colors.push(item.color); } }) var colors = []; console.log(result);