let arrayFirst = [{name: 'a', num: 1}, { name: 'b', num: 1} ]
let arraySecond = [{name: 'a', num: 1}, { name: 'b', num: 1} ]
let arrayThid = [{name: 'a', num: 1}, { name: 'c', num: 1} ]
... ... ...
预期输出:
[{name: 'a', num: 3}, { name: 'b', num: 2}, { name: 'c', num: 1} ]
我只找到了数组内部对象求和,但是数组按其对象键值求和怎么样?
最佳答案
您可以使用以下函数对值进行分组和求和。该方法根据需要获取尽可能多的数组(或对象),并根据 groupby (您的例子中的名称)和 sumkey 对它们进行求和
function sumArrays(groupby, sumkey, ...arrays) {
return [...arrays.flat().reduce((a, b) => a.set(b[groupby], (a.get(b[groupby]) || 0) + b[sumkey]), new Map())].map(([k, v]) => ({
[groupby]: k,
[sumkey]: v
}))
}
console.log(sumArrays('name', 'num', arrayFirst, arraySecond, arrayThid));
<script>
arrayFirst = [{
name: 'a',
num: 1
}, {
name: 'b',
num: 1
}]
let arraySecond = [{
name: 'a',
num: 1
}, {
name: 'b',
num: 1
}]
let arrayThid = [{
name: 'a',
num: 1
}, {
name: 'c',
num: 1
}]
</script>
关于javascript - JS : how to merge arrays with objects without duplicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59319974/