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)
複製代碼
相關文章
相關標籤/搜索