对象数组去重

有时候会需要对一些复杂的数据根据某个维度来进行整理,下面是我自己觉得还算比较好用的方法

// 以下一串数据,希望以ean为维度进行整合,相同的qty相加
const skuList = [
          {  ean: '0001', qty: 5},
          {  ean: '0001', qty: 4},
          {  ean: '0003', qty: 1},
          {  ean: '0002', qty: 2},
          {  ean: '0003', qty: 3}
       ] 

// 去重
function groupBy(array,f) {
          const groups = {};
          array.forEach(function(o){
            const group = JSON.stringify(f(o));
            groups[group] = groups[group] || [];
            groups[group].push(o);
          })
          return Object.keys(groups).map(function(group){
            return groups[group];
          } )
      }

// 统计数量
const result = groupBy(skuList,function(arr) {
    return arr.ean
}).map(item => {
    return {...item[0],qty: item.reduce((p,c) => {return p+ c.qty},0)}
})

// 最后的结果
[
    {  ean: '0001', qty: 9},
    {  ean: '0003', qty: 4},
    {  ean: '0002', qty: 2}
] 
 

 

posted @ 2020-08-05 00:12  王木木*  阅读(214)  评论(0编辑  收藏  举报