面試官在「逗」你系列 陣列去重你會幾種呀?

2021-10-06 04:10:23 字數 3062 閱讀 2256

陣列去重是乙個老生常談的話題,也是前端童鞋在面試時的一道高頻題。本文將深入的探索陣列去重的原理及實現,為各位小夥伴提供多種可以反手「調戲」面試官的解決方案。

話不多說,上去就來一梭子...

一般我們都會建立臨時變數tmp,儲存不重複的元素(以陣列元素儲存或物件的鍵來儲存);

遍歷待去重陣列arr,依次判斷tmp中是否包含該元素;

若tmp中不存在該元素,則放入;否則跳過不處理。

設定tmp為物件,物件的鍵儲存陣列元素的值,最終返回物件的所有鍵。

function array_unique (arr) 

let tmp = {}

let len = arr.length

for (let i = 0; i < len; i++)

} return object.keys(tmp)

}// 呼叫陣列去重

let arr = [1, 2, 3, 1, 2]

let newarr = array_unique(arr)

console.log(newarr) // ['1', '2', '3']

如果你採用這種方式來回答面試官的話,你就陷入了他在內心中早早設下的陷阱:

你這種方式能區分數字和字串嗎?能區分undefined'undefined'嗎?

你現在返回的資料型別還和原有的資料型別一致嗎?

帶著面試官的疑問,我們來看另外一種經典去重方式。

設定tmp為陣列,陣列中儲存唯一的元素,最終返回tmp

function array_unique (arr) 

let tmp =

for (let i = 0; i < len; i++)

} return tmp

}let arr = [1, 2, 3, '1', 2, undefined, undefined, 'undefined']

let newarr = array_unique(arr)

console.log(newarr) // [1, 2, 3, '1', undefined, 'undefined']

此刻,內心是否竊喜!

but, 如果你這麼考慮,又陷入了面試官的另乙個陷阱:

你這方式能篩選nan嗎?

好吧,面試官最大,再考慮!

原理還是同去重方式二,只不過我們使用es6的includes替換indexof方法,

includes() 方法,判斷陣列中是否包含某個元素,如果包含返回true,否則返回false

就是這麼so easy!

function array_unique (arr) 

let tmp =

for (let i = 0; i < len; i++)

} return tmp

}let arr = [1, 2, 3, '1', 2, undefined, undefined, 'undefined', nan, nan]

let newarr = array_unique(arr)

console.log(newarr) // [1, 2, 3, '1', undefined, 'undefined', nan]

此刻,你以為就結束嗎?不,不可能!

面試官的坑已經在前面等你很久了:

你的這個篩選方式能區分物件嗎?如{}、

有沒有想把自己的四十公尺大砍刀拿出來,neng屎面試官!(圖就不配了,自己腦補吧...) 然而,什麼都做不了,繼續想吧...

原理同上,我們要繼續換乙個判斷陣列是否包含某元素的方法:```findindex``

findindex查詢陣列是否包含某元素,如果存在返回元素的索引,否則返回-1。它比indexof更加先進的地方在於能傳入callback,按約定方式查詢。

function array_unique (arr) 

let tmp =

for (let i = 0; i < len; i++)

} return tmp

}let arr = [1, 2, 3, '1', 2, undefined, undefined, 'undefined', nan, nan, {}, {}, , ]

let newarr = array_unique(arr)

console.log(newarr) // [1, 2, 3, '1', undefined, 'undefined', nan, {}, ]

終於成功啦!來來來,可以瀟灑的問面試官,「您還有問題沒有?」

當然,主動挑釁面試官,是要承擔風險呦,有可能會因為你眨眼的時候,先眨了右眼被掛掉了...

給大家列個**,好區分幾個方法的作用,

方法\是否可檢測

null

undefined

nan{}

備註indexof是是

否否無includes是是

是否無findindex是是

是是需傳入特定的callback

陣列去重這道面試題,考察的知識點還是非常多的。首先是對陣列的常用方法要比較熟悉,還有其他的如nan與nan不相等,{}與{}不相等等知識點,以及靈活多變的思維邏輯。

胡哥有話說,乙個有技術,有情懷的胡哥!現任京東前端攻城獅一枚。

胡哥有話說,專注於大前端技術領域,分享前端系統架構,框架實現原理,最新最高效的技術實踐!

面試官在「逗」你系列 陣列去重你會幾種呀?

陣列去重是乙個老生常談的話題,也是前端童鞋在面試時的一道高頻題。本文將深入的探索陣列去重的原理及實現,為各位小夥伴提供多種可以反手 調戲 面試官的解決方案。話不多說,上去就來一梭子.一般我們都會建立臨時變數tmp,儲存不重複的元素 以陣列元素儲存或物件的鍵來儲存 遍歷待去重陣列arr,依次判斷tmp...

面試官在「逗」你系列 陣列去重你會幾種呀?

陣列去重是乙個老生常談的話題,也是前端童鞋在面試時的一道高頻題。本文將深入的探索陣列去重的原理及實現,為各位小夥伴提供多種可以反手 調戲 面試官的解決方案。話不多說,上去就來一梭子.一般我們都會建立臨時變數tmp,儲存不重複的元素 以陣列元素儲存或物件的鍵來儲存 遍歷待去重陣列arr,依次判斷tmp...

面試官在「逗」你系列 到底應該怎麼爬樓梯?!

演算法題是在面試過程中考察候選人邏輯思維能力 手寫 能力的一種方式,因為有一句古話說的好 說一千道一萬,不如寫段 看一看 今天我們就來個單刀直入,直奔主題,從乙個真實面試題到底怎麼爬樓梯來聊一聊演算法中的動態規劃。小明家有一樓梯共有10級台階,每次可以爬1級或2級,問小明爬到第10級台階,一共有多少...