繁体   English   中英

如果多个键是相同的JS,则求和对象中的值

[英]sum values in object if multiple keys are the same JS

例如我有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 }

如果rowcol相同,我想对值求和,因此输出应为:

{ row: aa, col: 1, value: 2 }
{ row: bb, col: 2, value: 1 }
{ row: bb, col: 3, value: 1 }
{ row: aa, col: 2, value: 1 }

谢谢您的帮助!

尝试了此操作:将对象数组中具有相同对象propertyB的javascript对象propertyA值求和

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

 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 } ] var o = {} var result = data.reduce(function(r, e) { var key = e.row + '|' + e.col; if (!o[key]) { o[key] = e; r.push(o[key]); } else { o[key].value += e.value; } return r; }, []); console.log(result) 

为了完整起见,带有用于可变键的版本,一个用于将零件分组的对象和Array#forEach

 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 }], grouped = []; data.forEach(function (a) { var key = ['row', 'col'].map(function (k) { return a[k]; }).join('|'); if (!this[key]) { this[key] = { row: a.row, col: a.col, value: 0 }; grouped.push(this[key]); } this[key].value += a.value; }, Object.create(null)); console.log(grouped); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

我要做的是将您的对象放入数组中,然后对其进行迭代,并在每次迭代中检查新对象的键是否与旧对象的键匹配,如果不匹配,则将对象加载到单独的数组中。 如果匹配,则将其值添加到旧值中。 我测试了以下代码,它似乎可以按您希望的方式工作。

 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM