Javascript 如果多个键相同,则对象中的值总和

Javascript 如果多个键相同,则对象中的值总和,javascript,arrays,Javascript,Arrays,例如,我有5个对象: { row: aa, col: 1, value: 1 } { row: bb, col: 2, value: 1 } { row: bb, col: 3, value: 1 } { row: aa, col: 1, value: 1 } { row: aa, col: 2, value: 1 } 如果行和列相同,我想求和值,因此输出应为: { row: aa, col: 1, value: 2 } { row: bb, col: 2, value: 1 } { row:

例如,我有5个对象:

{ row: aa, col: 1, value: 1 }
{ row: bb, col: 2, value: 1 }
{ row: bb, col: 3, value: 1 }
{ row: aa, col: 1, value: 1 }
{ row: aa, col: 2, value: 1 }
如果相同,我想求和值,因此输出应为:

{ row: aa, col: 1, value: 2 }
{ row: bb, col: 2, value: 1 }
{ row: bb, col: 3, value: 1 }
{ row: aa, col: 2, value: 1 }
谢谢你的帮助

我试过这个:

您可以使用
reduce()
和一个对象来存储密钥

var数据=[
{行:'aa',列:1,值:1},
{行:'bb',列:2,值:1},
{行:'bb',列:3,值:1},
{行:'aa',列:1,值:1},
{行:'aa',列:2,值:1}
]
var o={}
var结果=数据.reduce(函数(r,e){
var key=e.row+'|'+e.col;
如果(!o[key]){
o[key]=e;
r、 按(o[键]);
}否则{
o[key].value+=e.value;
}
返回r;
}, []);

console.log(result)
我要做的是将对象放在一个数组中,然后迭代该数组,并在每次迭代中检查新对象的键是否与旧对象的键匹配,如果不匹配,则将对象加载到单独的数组中。如果匹配,则将其值添加到旧的值中。我测试了以下代码,它似乎可以按照您的要求工作

 var array = [{ row: 'aa', col: 1, value: 1 },
         { row: 'bb', col: 2, value: 1 },
         { row: 'bb', col: 3, value: 1 },
         { row: 'aa', col: 1, value: 1 },
         { row: 'aa', col: 2, value: 1 }];

 var newArray = [];

 for(var x in array) {
    for(var y in newArray) {
        var found = false;
        if(array[x].row == newArray[y].row && array[x].col == newArray[y].col) {
             newArray[y].value += array[x].value;
             found = true;
             break;
        }
    }
    if(!found) {
          newArray.push(array[x]);
    }
 }

 console.log(newArray);

为了完整起见,我们提供了一个用于变量键的版本,一个用于对部件和对象进行分组的对象

var data=[{row:'aa',col:1,value:1},{row:'bb',col:2,value:1},{row:'bb',col:3,value:1},{row:'aa',col 1,value:1},{row:'aa',col 2,value:1}],
分组=[];
data.forEach(函数(a){
var key=['row','col'].map(函数(k){returna[k];}).join('|');
如果(!此[键]){
此[键]={row:a.row,col:a.col,value:0};
分组。按(此[键]);
}
此[key].value+=a.value;
},Object.create(null));
控制台日志(分组)

.as console wrapper{max height:100%!important;top:0;}
@danielshillock更新了我的问题。您能否展示您尝试的内容如何应用于您的问题,否则我们将无法知道您在什么时候遇到问题。请创建一个。另见。你必须展示你自己为解决这个问题所做的努力。这里没有人有义务从头开始给你一个解决方案,但我们会帮助你改进你所尝试的。@Oka我几乎花了半天的时间来解决这个问题,我的答案离我给出的例子不远,是的,你没有义务解决这个问题