【问题标题】:How to merge objects and sum just some values of duplicate objects? [duplicate]如何合并对象并仅对重复对象的一些值求和? [复制]
【发布时间】:2026-01-20 07:05:02
【问题描述】:

假设我有一个对象数组:

[
    1: {name: "john", id: 200, points: "333"},
    2: {name: "alice", id: 302, points: "20"},
    3: {name: "alice", id: 302, points: "13"},
    4: {name: "kevin", id: 501, points: "3"},
    5: {name: "adam", id: 999, points: "100"},
    6: {name: "adam", id: 999, points: "30"},
    7: {name: "adam", id: 999, points: "60"},
]

如您所见,它们已经排序(使用 lodash)。 我想要实现的是我想合并具有相同 id 的对象并添加点。所以它看起来像这样:

[
    1: {name: "john", id: 200, points: "333"},
    2: {name: "alice", id: 302, points: "30"},
    3: {name: "kevin", id: 501, points: "3"},
    4: {name: "adam", id: 999, points: "190"},
]

我正在使用 React 和 Lodash。该数组中大约有 7000 条记录。

【问题讨论】:

标签: javascript arrays reactjs sorting lodash


【解决方案1】:

没有 Lodash 的解决方案

var a = [
    {name: "john", id: 200, points: "333"},
    {name: "alice", id: 302, points: "20"},
    {name: "alice", id: 302, points: "13"},
    {name: "kevin", id: 501, points: "3"},
    {name: "adam", id: 999, points: "100"},
    {name: "adam", id: 999, points: "30"},
    {name: "adam", id: 999, points: "60"},
];

var o = {};

a.forEach((i) => {
  var id = i.id;
  i.points = parseInt(i.points)
  if (!o[id]) {
    return o[id] = i
  }
  return o[id].points = o[id].points + i.points
})

console.log(o)
var a2 = []
Object.keys(o).forEach((key) => {
 a2.push(o[key])
})

console.log(a2)

https://jsbin.com/dififukiqa/edit?js,console

【讨论】:

    最近更新 更多