前言
數組去重已經是一個老生常談的問題了,依然經久不息,經過歲月的變遷es标準的更新疊代,似乎有越來越多的方法和方式供我們使用,那麼那種方式才是最優的?那種才是最簡潔的?這個我們一起來探讨。
省略:傳統的遞歸方法,這裡我就不說了,是最傳統也是最笨的方法。
方法一:es5使用filter
使用Array.prototype.filter()方法,對元素進行過濾;
相關資料:
Array.prototype.filter()var array = [2, "2", 2, "2"];
// es5 使用filter
function unique(array) {
var obj = {};
return array.filter(function (item, index) {
var fullItem = (typeof item + item);
return obj.hasOwnProperty(fullItem) ? false : (obj[fullItem] = true);
});
}
console.log(unique(array)); //[2,"2"]
方法二:使用es6 Set
Set裡的元素隻能出現一次,即元素是唯一的。
下面的代碼中也使用了(...)擴充語句,簡單來說就是把數組轉換成n個對象的方法。
相關連結:
Setvar array = [2, "2", 2, "2"];
//es6 使用Set特性(Set元素隻會出現一次,即元素是唯一的)
let unique = (array) => [...new Set(array)]; //(...)擴充語句,簡單來說就是把數組參數轉換為多個對象參數
console.log(unique(array)); //[2,"2"]
方法三:使用es6 Map
Map也是es6新出的資料類型,方法set、has、get、clear、delete、keys都挺好用的。
Mapvar array = [2, "2", 2, "2"];
//es6 Map 本質使用的還是Array.prototype.filter()
function unique(array) {
let m = new Map();
return array.filter((item) => !m.has(item) && m.set(item, 1));
}
console.log(unique(array));
總結
個人覺得最優的方案是第二種!歡迎補充,歡迎指正~

如果本文對你有所幫助,請打賞——1元就足夠感動我:)
聯系郵箱:[email protected]
我的GitHub:
https://github.com/vipstone關注公衆号:
作者:
王磊出處:
http://vipstone.cnblogs.com/本文版權歸作者和部落格園共有,歡迎轉載,請标明出處。