js 陣列去重的思考

2022-08-24 02:06:14 字數 1797 閱讀 6126

問題:將乙個陣列元素去重。

假設我們的陣列為

var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, nan, nan,'nan', 0, 0, 'a', 'a',,];
去重的方法很多,筆者這裡主要總結了7種方法。

第一種:採用set去重(es6)

let f1 = (arr)=>
array.from()方法從乙個類似陣列或可迭代物件建立乙個新的,淺拷貝的陣列例項。

缺點:該方法無法去除元素。

第二種:採用演算法的實習思想採用雙重遍歷去重。

let f2 = (arr)=>

}return

arr;

}

該方法容易想到。

缺點:無法去掉nan與。

第三種:採用indexof()去重。

let f3 = (arr)=>

let arr1 =;

for(let i =0;i)

}return

arr1;

}

該方法的思想是查詢arr1中是否存在arr中的元素,不存在則將該元素push到陣列中去。

缺點:無法去除nan與。

第四種:排序的方式。

let f4 = (arr)=>

arr =arr.sort();

let arr1 =[arr[0]];

for(let i = 1;i)

}return

arr1;

}

將陣列排序後,通過前後比較,如果不相同,就將去push到arr1中去。

缺點:無法去除nan與。

第五種:採用includes的方法去重。

let f5 = (arr)=>

let arr1 =;

for(let i =0;i)

}return

arr1;

}

該方法也是採用的如果arr1中不存在arr中的元素,就將該元素push到arr1中去。

缺點:無法去掉。

第六種:filter去重。

let f6 = (arr)=>)

}

缺點:不能去除,而且會將nan與"nan"當成一樣的。

第七種:利用物件的hasownproperty方法

let f7 = (arr)=>;

return arr.filter((item)=>)

}

缺點:無。不過該方法是有乙個奇怪的地方。

let obj=;

let obj1=

例如我宣告了兩個物件,乙個屬性名是數字,乙個屬性名是字串。當我列印的時候。

會發現是一樣的,這也就是為什麼用obj[typeof item +item] = true而不用obj[item] = true。

JS陣列去重,物件去重

例項1根據indexof去重,indexof的好處就是返回的是首次出現的位置,這樣後面即使出現的值一樣,也只能返回第一次出現的索引,當然這個只適用於簡單的陣列 物件陣列去重 const objarr const obj const newobjarr for let i 0 i objarr.len...

js 陣列去重

function unique arr if isrepeated return result 建立乙個新的陣列,迴圈原有的陣列,每取乙個數就迴圈判斷新建的陣列中是否有和這個相等的值,沒有則插入。方法簡單,但是有雙重迴圈,陣列大了之後效率低。所以能一次迴圈解決最好。var str new array...

JS 陣列去重

我總共想出了三種演算法來實現這個目的 array.prototype.unique1 function return n array.prototype.unique2 function r n為hash表,r為臨時陣列 for var i 0 i this.length i 遍歷當前陣列 retu...