標籤:bsp let es6 return org reference als get style
前言
數組去重已經是一個老生常談的問題了,依然經久不息,經過歲月的變遷es標準的升級迭代,似乎有越來越多的方法和方式供我們使用,那麼那種方式才是最優的?那種才是最簡潔的?這個我們一起來探討。
省略:傳統的遞迴方法,這裡我就不說了,是最傳統也是最笨的方法。
方法一:es5使用filter
使用Array.prototype.filter()方法,對元素進行過濾;
相關資料:Array.prototype.filter()
var array = [2, "2", 2, "2"];// es5 使用filterfunction 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個對象的方法。
相關連結:Set
var 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都挺好用的。
相關連結:Map
var 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));
總結
個人覺得最優的方案是第二種!歡迎補充,歡迎指正~
javascript數組去重方法匯總