方法1:
關鍵詞:雙for循環(huán)冰单、splice
思 路:將數(shù)組中的值一個個的比較鸯匹,重復的就刪掉
復雜度: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:
關鍵詞 indexOf、push
思路:設置一個新數(shù)組,根據(jù)indexOf篩選原數(shù)組,只要新數(shù)組中沒有的爵政,就push到新數(shù)組
復雜度: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:
關鍵詞 es6 Set、Array.from
思 路:
- Set函數(shù)可以接受一個數(shù)組(或類似數(shù)組的對象)作為參數(shù)陶缺,用來初始化钾挟,其成員的值都是唯一的,沒有重復的值饱岸。
- Array.from()方法可以將類數(shù)組對象和可遍歷(iterable)的對象轉化為真正的數(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]
總結
在前端面試中,數(shù)組去重還是一個出現(xiàn)頻率比較高的題目,算是一種基本能力吧苫费。以上方法汤锨,在我看來,還是比較容易理解的黍衙,還有一些其他方法泥畅,正在整理中,會陸續(xù)更新琅翻。