请教大家个问题,对象数组去除重复数据,并且累加数量?

作者站长头像
站长
· 阅读数 15
let arr = [
  {
    code: "10AT",
    batch: "1027",
    store: "001",
    number: 10,
  },
  {
    code: "10AT",
    batch: "1027",
    store: "001",
    number: 10,
  },
  {
    code: "10AT",
    batch: "1027",
    store: "002",
    number: 10,
  },
  {
    code: "10AAT",
    batch: "1027",
    store: "002",
    number: 100,
  },
];

需要将code,batch,store都相同的number累加,并且去除重复项,结果为

let result = [
  {
    code: "10AT",
    batch: "1027",
    store: "001",
    number: 20,
  },
  {
    code: "10AT",
    batch: "1027",
    store: "002",
    number: 10,
  },
  {
    code: "10AAT",
    batch: "1027",
    store: "002",
    number: 100,
  },
];
回复
1个回答
avatar
test
2024-07-17

基本思路:分组→按组合计→处理成结果视图

用 Lodash

const result = _(arr).groupBy(({ code, batch, store }) => [code, batch, store].join("|"))
    .values()
    .map(list => {
        const { code, batch, store } = list[0];
        return { code, batch, store, number: _.sumBy(list, "number") };
    })
    .value();

自己写

const result = Object.values(
    arr.reduce((r, { code, batch, store, number }) => {
        const key = `${code}|${batch}|${store}`;
        const item = r[key] ??= { code, batch, store, number: 0 };
        item.number += number;
        return r;
    }, {})
);
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容