js 数组去重求和 (转载)

方法一:js数组id去重,value值相加问题

来源:https://www.jianshu.com/p/8f79e31b46ed

    // js
    let arr = [
      {
        id: 1,
        value: 5
      },
      {
        id: 2,
        value: 3
      },
      {
        id: 3,
        value: 4
      },
      {
        id: 1,
        value: 3
      },
      {
        id: 2,
        value: 3
      }
    ];

    let newArr = [];
    arr.forEach(el=> {
      const res = newArr.findIndex(ol=> {
        return el.id === ol.id;
      });
      if (res!== -1) {
        newArr[res].value = newArr[res].value +  el.value;
      } else {
        newArr.push(el);
      }
    });
  
 
问题:原来的数组arr中的数据也改变了。怎么做才能让原来的数组保持不变呢?
 
来源https://www.cnblogs.com/juneling/p/9149969.html
适用 多层 数组嵌套的深拷贝
var ary2 = JSON.parse(JSON.stringify(ary1));
  //此方法适用于Oject的深度拷贝,因为Array属于Oject类型,所以也适用于此处;
  //需要注意的是:作为Oject的深度拷贝时,要复制的function会直接消失,所以这个方法只能用在单纯只有数据的对象。
 

 

方法二:js数组去重

来源:https://www.cnblogs.com/jlyuan/p/11530877.html

1.基本数据类型数据去重

 var list = [1, 2, 1, 3, 2, 2,4]
 var res = list.filter((e,i)=>list.indexOf(e)==i)
 console.log(res)

2.引用数据类型去重(实际开发中比较常见)

复制代码
var list = [{id:110,name:"java"},{id:111,name:"javascript"},{id:110,name:"java"}]
var res = []
// 实现思路:遍历list数组,如果不存在res数组中,就添加到res
list.forEach(item=>{
  let flag = res.some(e=>{
    if(item.id === e.id){
      return true;
    }
  })
  if(!flag){
    res.push(item)
  }
})

console.log(res)
复制代码

 

 
 
posted @ 2019-11-05 20:10  hao_1234_1234  阅读(1086)  评论(0编辑  收藏  举报