es6根据数组对象里的指定字段累加并去重

发布于 2022-09-12 23:13:18 字数 597 浏览 10 评论 0

例如:

const arr = [
    {id:1,typeId:1,num:2},
    {id:2,typeId:1,num:5},
    {id:3,typeId:2,num:2},
    {id:4,typeId:2,num:1},
    {id:5,typeId:3,num:2},
    {id:6,typeId:3,num:2},
    {id:7,typeId:3,num:2},
];

如果只是去重使用map()和filter()方法就行

const res = new Map();
arr.filter((item)=>{
    !res.has(item.typeId) && res.set(item.typeId,1)
});

现在我想要的是能够去重,但相同的typeId的num要累加
最后的结果希望是这样的:

const arr = [
    {id:1,typeId:1,num:7},
    {id:3,typeId:2,num:3},
    {id:5,typeId:3,num:6},
];

不知道有什么办法能解决

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

青春有你 2022-09-19 23:13:18
arr.reduce((list, item)=>{
    if(res.has(item.typeId)){
        res.get(item.typeId).num += item.num
    }else{
        let o = {...item}
        list.push(o)
        res.set(item.typeId, o)
    }
    
    return list
}, []);
墟烟 2022-09-19 23:13:18
Object.values([
    {id:1,typeId:1,num:2},
    {id:2,typeId:1,num:5},
    {id:3,typeId:2,num:2},
    {id:4,typeId:2,num:1},
    {id:5,typeId:3,num:2},
    {id:6,typeId:3,num:2},
    {id:7,typeId:3,num:2},
].reduce((res,v)=>{
    if(res[v.typeId]) res[v.typeId].num += v.num;
    else res[v.typeId] = v;
    return res;
}, {}))
洒一地阳光 2022-09-19 23:13:18

const arr = [

{id: 1, typeId: 1, num: 2},
{id: 2, typeId: 1, num: 5},
{id: 3, typeId: 2, num: 2},
{id: 4, typeId: 2, num: 1},
{id: 5, typeId: 3, num: 2},
{id: 6, typeId: 3, num: 2},
{id: 7, typeId: 3, num: 2},

];
const map = new Map();
arr.forEach(item => {

const value = map.get(item.typeId);
if (value) {
    value.num += item.num;
    map.set(item.typeId, value);
} else {
    map.set(item.typeId, item);
}

});
const result = [...map.values()];
console.log(result);

凉城凉梦凉人心 2022-09-19 23:13:18
Object.values(arr.reduce((res, item) => {
  res[item.typeId] || (res[item.typeId] = {...item, num: 0})
  res[item.typeId].num += item.num;
  return res;
}, {}));
笙痞 2022-09-19 23:13:18

你这个不能称为去重,只能是相同typeId的累加。
理论上新的数组中不该有id属性的。

澜川若宁 2022-09-19 23:13:18

介绍一个库alasql:

const arr = [
    {id:1,typeId:1,num:2},
    {id:2,typeId:1,num:5},
    {id:3,typeId:2,num:2},
    {id:4,typeId:2,num:1},
    {id:5,typeId:3,num:2},
    {id:6,typeId:3,num:2},
    {id:7,typeId:3,num:2},
];
var res = alasql('SELECT typeId, SUM(num) AS b FROM ? GROUP BY typeId', [arr]);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文