一、利用ES6 Set去重(ES6中最常用)
function unique (arr){
return Array.from(new Set(arr))
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined,
null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]
不考慮兼容性,這種去重的方法代碼最少。這種方法還無法去掉“{}”空對象,後面的高階方法會添加去掉“{}”空對象。
二、利用for嵌套for,然後splice去重(ES5中最常用)
function unique(arr){
for(var i=0; i for(var j=i+1;j if(arr[i]==arr[j]){ //第一個等同於第二個,splice方法刪除第二個 arr.splice(j,1); j--; } } } return arr; } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}] 雙層循環,外層循環元素,內層循環時比較值。值相同時,則刪去這個值 三、利用indexOf去重 新建一個空的結果數組,for 循環原數組,判斷結果數組是否存在當前元素,如果有相同的值則跳過,不相同則push進數組。 四、利用sort() 利用sort()排序方法,然後根據排序後的結果進行遍歷及相鄰元素比對。 五、利用對象的屬性不能相同的特點進行去重 六、利用includes function unique(arr) { var obj = {}; return arr.filter(function(item, index, arr){ return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true) }) } 利用hasOwnProperty 判斷是否存在對象屬性。 八、利用filter
九、利用遞歸去重
十、利用Map數據結構去重
創建一個空Map數據結構,遍歷需要去重的數組,把數組的每一個元素作為key存到Map中。由於Map中不會出現相同的key值,所以最終得到的就是去重後的結果。
十一、利用reduce
十二、[...new Set(arr)]
閱讀更多 WEB前端交流 的文章