js 数组去重求和 (转载)

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

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

// 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.htmlhtml

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

 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)
复制代码
相关文章
相关标签/搜索