我有一组对象,如下所示:
{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
答案 0 :(得分:8)
您可以使用像这样的临时地图
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)
演示:Fiddle
答案 1 :(得分:0)
控制它...
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);