八哥的面試常考題(一) JS陣列去重(1) ES5

2021-09-24 05:12:24 字數 2377 閱讀 8655

最近看了蠻多陣列去重的方法,想做乙個系統的歸納總結

新建陣列,遍歷,用indexof判斷(ie8+),值不在新陣列就push

// an highlighted block

var a=[1

,1,3

,9,4

,3,2

,3,6

,7,5

,11]function

uniq

(array)

}return temp;

} console.

log(

uniq

(a))

陣列下標法

陣列下標法

還是得呼叫「indexof」效能跟方法1差不多,

實現思路:如果當前陣列的第i項在當前陣列中第一次出現的位置不是i,

那麼表示第i項是重複的,忽略掉。否則存入結果陣列。

// an highlighted block

function

uniq3

(array)

}return result;

}var a3 =[1

,2,"2",4

,9,"a"

,"a",2

,3,5

,6,5

];console.

log(

uniq3

(a3)

);

物件鍵值去重法
給出乙個不同型別的陣列

速度最快, 佔空間最多(空間換時間)

該方法執行的速度比其他任何方法都快, 就是占用的記憶體大一些。

現思路:新建一js物件以及新陣列,遍歷傳入陣列時,判斷值是否為js物件的鍵,

不是的話給物件新增該鍵並放入新陣列。

注意點:判斷是否為js物件鍵時,會自動對傳入的鍵執行「tostring()」,

不同的鍵可能會被誤認為一樣,例如n[val]-- n[1]、n[「1」];

解決上述問題還是得呼叫「indexof」。

// an highlighted block

function

uniq1

(array)

;var result =

;var type ='';

var val;

for(

var i=

0; i) result.

push

(val);}

else

if(temp[val]

.indexof

(type)

=='-1')}

return result;

}var a1 =[1

,2,"2",4

,9,"a"

,"a",2

,3,5

,6,5

];console.

log(

uniq1

(a1)

);

排序後相鄰去除法(破壞原陣列)
給傳入陣列排序,排序後相同值相鄰

然後遍歷時,新陣列只加入不與前一值重複的值

// an highlighted block

function

uniq2

(array)

}return result;

}var a2 =[1

,2,"2",4

,9,"a"

,"a",2

,3,5

,6,5

];console.

log(

uniq2

(a2)

)

優化遍曆法
獲取沒重複的最右一值放入新陣列

推薦的方法

實現思路:獲取沒重複的最右一值放入新陣列。

(檢測到有重複值時終止當前迴圈同時進入頂層迴圈的下一輪判斷)

// an highlighted block

var a4 =[1

,2,2

,3,5

,3,6

,5];

function

uniq4

(array)

} result.

push

(array[i]);

}return result;

}console.

log(

uniq4

(a4)

);

Js面試題(一) js實現陣列去重怎麼實現?

方法1 建立乙個新的臨時陣列來儲存陣列中已有的元素 方法2 使用雜湊表儲存已有元素 方法3 使用indexof判斷陣列元素第一次出現的位置是否為當前位置 方法4 先排序再去重 第一種方法和第三種方法都使用了indexof 這個函式的執行機制也會遍歷陣列 第二種使用了雜湊表,是最快的 第三種也有乙個排...

JS 陣列去重實現,一道面試題

今日去某公司面試web前端,本來對這個公司感覺一般,但是技術面試兩面一共從下午2 30到5 30,各種問題問,主要以js為主,頓時對這個公司有了好的印象,個人感覺面試的水平高最起碼表明乙個公司的態度。問的還算是很給力,都是一般不幾個常用到的,但是想一想確實還挺實用,有了這次思路,下次自己玩前端的時候...

JS實用功能 9 面試中常遇見的陣列去重

js陣列去重是面試中並不少見的問題,聽起來很簡單,當你興高采烈地回答了你的方法之後,你以為這道題就結束了嗎?no,一般來說,面試官會繼續問你 除了你剛剛說的方法,還有其他更好的方法嗎?這時的你就需要了解多幾種js陣列去重的方法了。下面我們先來看看常見的去重方法先吧。拿前乙個資料和後面的資料做對比,與...