存在数组如下

let arr = [
    {
        id: 1,
        num: 2,
    },
    {
        id: 2,
        num: 3,
    },
    {
        id: 3,
        num: 4,
    },
    {
        id: 1,
        num: 3,
    },
];

//现在需要将id相同的进行合并,并且累计num
实现方案如下

let newArr = arr.reduce((prev, cur) => {
    //prev是新数组,cur是当前元素
    let ids = prev.map((item) => {
        return item.id;
    });
    if (ids.includes(cur.id)) {
          prev = prev.map((item) => {
          if (item.id == cur.id) {
              item.num += cur.num;
          }
          return item;
      });
    } else {
        prev.push(cur);
    }
    return prev;
}, []);
console.log(newArr);

之后就发现,id相同的合并累加了。
注意点:此方法在vue中,一般使用场景会在watch中,切记,在累加数量的时候要深拷贝赋值,否则会陷入无限循环!!!


明未为洺
65 声望2 粉丝