javascript - JS : how to merge arrays with objects without duplicates

标签 javascript arrays object

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/

相关文章:

javascript - 为什么我的 Javascript 对象将其方法输出为 typeof 函数而不是其结果?

javascript - HTML 文本字段的行为类似于密码字段

javascript - 等高在 Safari 中不起作用 (jQuery)

javascript - AngularJs - 如何在不使用 ng-touch 或 ng-click 的情况下检测移动设备中的点击事件?

arrays - TypeScript:输入带有值或空的数组/元组

Java - 从中​​间开始遍历二维数组

java - 根据浮点值对对象数组进行排序

javascript - 从 node.js 后端控制前端 javascript

java - 表达式的类型必须是数组类型但它解析为 String

php - 在PHP中使用方法链接是否会导致资源或内存出现任何问题?