假设我们有以下数组。
[{ "id": "a01", "key": "k01", "value" : 100},
{ "id": "a02", "key": "k02", "value" : 320},
{ "id": "a02", "key": "k02", "value" : 20},
{ "id": "a02", "key": "k02", "value" : 220},
{ "id": "a03", "key": "k01", "value" : 120},
{ "id": "a03", "key": "k01", "value" : 120},
{ "id": "a03", "key": "k03", "value" : 300}]
我想如下创建新数组。
[{ "id": "a01", "key": "k01", "value" : 100},
{ "id": "a02", "key": "k02", "value" : 560},
{ "id": "a03", "key": "k01", "value" : 240},
{ "id": "a03", "key": "k03", "value" : 300}]
我想合并记录并添加具有相同ID和键的值。 发生情况可能有所不同。 实现这一目标的最简单方法是什么?
我尝试在for循环中使用.filter提取具有相同ID和键的记录, 能够合计结果然后将其推入新数组,但是我无法跳过其他记录。 有没有办法在循环中跳过记录? (例如,类似i + filteredArr.length而不是i ++的循环计数器)
答案 0 :(得分:1)
let x = [
{ "id": "a01", "key": "k01", "value" : 100},
{ "id": "a02", "key": "k02", "value" : 320},
{ "id": "a02", "key": "k02", "value" : 20},
{ "id": "a02", "key": "k02", "value" : 220},
{ "id": "a03", "key": "k01", "value" : 120},
{ "id": "a03", "key": "k01", "value" : 120},
{ "id": "a03", "key": "k03", "value" : 300}
]
let y = {};
x.forEach((val)=> {
if(y[val.id + '_' + val.key]) {
y[val.id + '_' + val.key].value = y[val.id + '_' + val.key].value + val.value;
}
else {
y[val.id + '_' + val.key] = {
"value": val.value
}
}
})
let arr = [];
for(key in y) {
let id_key = key.split("_")
arr.push({
id: id_key[0],
key: id_key[1],
value: y[key].value
});
}
console.log(arr);