復雜數組去重


遇到復雜數組去重問題

之前一直使用的

this.list = [...new Set(this.list)]

不管用了,具體原因,待解。

 

發現一個很好用的方法

一,適用於對整個復雜對象進行對比去重

 
        
// 復雜數組去重
removeDuplicates(arr){
  let obj = {}
  return arr.filter((item, index) => {
    // 防止key重復
    let newItem = item + JSON.stringify(item)
    return obj.hasOwnProperty(newItem) ? false : obj[newItem] = true
  })
},
知識點:
hasOwnProperty:判斷 obj中有無newItem這個屬性。
返回值為布爾值。
只能找到自身屬性,繼承屬性為false
需要注意一點,js並沒有保護hasOwnProperty。意味着如果提前把hasOwnProperty值設為false或true
得到的結論並不准確。如果擔心這種情況,1.可以直接使用原型鏈上真正的 hasOwnProperty 方法
2.使用另一個對象的`hasOwnProperty` 並且call
({}).hasOwnProperty.call(foo, 'bar'); // true
3.也可以使用 Object 原型上的 hasOwnProperty 屬性
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

let arr = [1,2,3,4,4,1] 
let newArr = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(newArr);

此方法不適於復雜對象,includes不能適用對象

 

二,適用於對對象中某一項進行對比去重(比如 id)

function unique(arr){            
        for(var i=0; i<arr.length; i++){
            for(var j=i+1; j<arr.length; j++){
                if(arr[i]==arr[j]){         //第一個等同於第二個,splice方法刪除第二個
                    arr.splice(j,1);
                    j--;
                }
            }
        }
return arr;
}

 

let person = [
     {id: 0, name: "小明"},
     {id: 1, name: "小張"},
     {id: 2, name: "小李"},
     {id: 3, name: "小孫"},
     {id: 1, name: "小周"},
     {id: 2, name: "小陳"},  
];
 
let obj = {};
 
let peon = person.reduce((cur,next) => {
    obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
    return cur;
},[]) //設置cur默認類型為數組,並且初始值為空的數組
console.log(peon);

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM