前兩天看到有乙個人在總結面試的時候寫到問到了陣列去重,說是方法很多。一時手癢把我能想到的都寫出來了。
1、最傳統的方法,「鏈式」檢索,這個方法雖說是雙層for迴圈巢狀,但是能夠保留陣列原有的順序,對於有順序要求的可以用這個,而且可以相容低版本瀏覽器。
let ary = [2,324,35,2,36,1,2,5,3,51,31,2,5,2,24,5,46,789,0,'2','2'];
function uniq (ary)
} !isrepeat && res.push(ary[i])
} return res;
}
2、利用物件的屬性不能重複的特性,但是物件的屬性不能保留定義的時候的順序,所以這個方法會破壞原有陣列的順序。
tips:為了防止太多重複,之後的**都只寫關鍵部分,同時用了箭頭函式。
let obj = {};
ary.foreach(e=>
return true;
})
3、在陣列中檢索,能夠被檢索到便認為是重複,思路感覺跟第乙個方法略有些相似
res.push(ary[0]);
ary.foreach(e=>
})
4、先將陣列排序,將相鄰相同的值去掉,但是這個只適用於資料型別一致的陣列。當然也破壞了原有的陣列,如果想要不破壞資料來源,可以先拷貝乙份。
ary.sort().foreach((e, i, array)=>)
5、利用資料的篩選和some等方法,主要思路同方法一,但是這個方法的效率應該是不如方法一的,畢竟每次都要拷貝乙個新的陣列。
ary.filter((e, i, array)=>!array.slice(i+1).some(ele=>ele === e));
如果想要保證原有的順序,可以先倒序陣列。
ary.reverse().filter((e, i, array)=>!array.slice(i+1).some(ele=>ele === e)).reverse();
6、最後乙個是es6提供的新的資料結構set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值。
res = [ ...new set(ary)];
哈哈,是不是看起來炒雞棒! 面試題 4種陣列去重的方法
陣列去重或者其衍生作為筆試題或者機試題出現的機率也是很大的,寫出的方法越多,則讓面試官覺得你思維越開闊,那麼成功的機率當然就大了。廢話不多說,下面來說說下面我整理的4中陣列去重的方法 方法一 findinarr方法 select方法組合 findinarr 查詢乙個數在當前陣列中是否存在,存在返回t...
幾種陣列去重方法
使用es6中的set是最簡單的去重方法。var arr 1 1,true true true true,15 15,false false undefined,undefined,null null nan nan nan 0 0,a a function arr unique1 arr arr u...
多種陣列去重的方法
陣列內都是數字方法 1.建立乙個空陣列,用於存放不重複的值 2.給陣列排序 3.用遞迴相鄰逐個對比,如果不相同,則push到建立的空陣列裡面去 var a 1,2,5,6,2,1,0,2,8,4,56,4,65,4 var n var s a.sort function a,b function c...