方法1:
關(guān)鍵詞:雙for循環(huán)出爹、splice
思 路:將數(shù)組中的值一個個的比較锭沟,重復(fù)的就刪掉
復(fù)雜度:O(n^2)
function removeDup(array) {
for (var i = array.length-1; i>=1; i--){
for(var j = i-1; j>=0; j--){
if(array[j] == array[i])
array.splice(j,1);
}
}
return array;
}
a = [1,1,2,2,2,3,3,4];
removeDup(a);
// [1, 2, 3, 4]
方法2:
關(guān)鍵詞 indexOf鞋怀、push
思路:設(shè)置一個新數(shù)組迂求,根據(jù)indexOf篩選原數(shù)組霞怀,只要新數(shù)組中沒有的传货,就push到新數(shù)組
復(fù)雜度:O(n)
function removeDup(array) {
var newArray = [];
for(var i = 0; i < array.length;i++){
if(newArray.indexOf(array[i]) == -1 ) {
newArray.push(array[i]);
}
}
return newArray;
}
a = [1,1,2,2,2,3,3,4];
removeDup(a);
// [1, 2, 3, 4]
方法3:
關(guān)鍵詞 es6 Set屎鳍、Array.from
思 路:
Set函數(shù)可以接受一個數(shù)組(或類似數(shù)組的對象)作為參數(shù),用來初始化问裕,其成員的值都是唯一的逮壁,沒有重復(fù)的值。
Array.from()方法可以將類數(shù)組對象和可遍歷(iterable)的對象轉(zhuǎn)化為真正的數(shù)組粮宛。
function removeDup(a) {
return Array.from(new Set(a));
}
a = [1,1,2,2,2,3,3,4];
removeDup(a);
// [1, 2, 3, 4]
總結(jié)
在前端面試中窥淆,數(shù)組去重還是一個出現(xiàn)頻率比較高的題目,算是一種基本能力吧。以上方法巍杈,在我看來忧饭,還是比較容易理解的,還有一些其他方法筷畦,正在整理中词裤,會陸續(xù)更新。