測試用例
var arr = [1,1,"1","1",0,0,"0","0",undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/]indexOf
function unique(arr){ var temp = [] for(var i=0;i[ 1, "1", 0, "0", undefined, null, {}, {}, [], [], /a/, /a/ ]
NaN丟失
function unique(arr){ var temp = [] arr.forEach(function(item){ if(temp.indexOf(item) === -1){ temp.push(item) } }) return temp } console.log(unique(arr)) > [ 1, "1", 0, "0", undefined, null, NaN, NaN, {}, {}, [], [], /a/, /a/ ]
NaN重復
indexOf認為NaN與NaN是不重復的
includesfunction unique(arr){ var temp = [] for(var i=0;i[1, "1", 0, "0", undefined, null, NaN, {}, {}, [], [], /a/, /a/]
includes認為NaN和NaN是重復的
===function unique(arr){ var temp = [] var isRepeat = false for(var i=0;i[1, "1", 0, "0", undefined, null, NaN, NaN, {}, {}, [], [], /a/,/a/]
NaN重復
使用對象實現數組去重及改進function unique(arr){ var obj = {} var temp = [] for(var i=0;i[ 1, 0, undefined, null, NaN, {}, [], /a/ ]
無法區分隱式類型轉換成字符串后一樣的值,比如1和"1"
無法處理復雜數據類型,比如對象(因為對象作為key會變成[object Object])
改進1function unique(arr){ var obj = {} var temp = [] var key for(var i=0;i改進2[ 1, "1", 0, "0", undefined, null, NaN, {}, [], /a/ ]
function unique(arr){ var obj = {} var temp = [] var key for(var i=0;imap[ 1, "1", 0, "0", undefined, null, NaN, {}, [] ]
function unique(arr){ var temp = [] var map = new Map() for(var i=0; iset[ 1, "1", 0, "0", undefined, null, NaN, {}, {}, [], [], /a/, /a/ ]
function unique(arr){ var set = new Set(arr) return Array.from(set) } console.log(unique(arr)) > [ 1, "1", 0, "0", undefined, null, NaN, {}, {}, [], [], /a/, /a/ ]各種方法比較 總結
數組去重需要根據場景選擇合適的去重方法,沒有固定的答案。
參考資料談JavaScript數組去重
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83426.html
摘要:引子數組去重是一個老生常談的話題,在面試中也經常會被問道。其中如果數組是排序的,去重運算效率更高,因為排序能夠將相同的數排列在一起,方便前后比較。當數組有序對于對象的去重,我們知道為,所以使用比較對象在實際場景中沒有意義。 引子 數組去重是一個老生常談的話題,在面試中也經常會被問道。對于去重,有兩種主流思想: 先排序,線性遍歷后去重,時間復雜度O(n*log2n); 使用哈希,空間換...
摘要:專題系列第三篇,講解各種數組去重方法,并且跟著寫一個前言數組去重方法老生常談,既然是常談,我也來談談。它類似于數組,但是成員的值都是唯一的,沒有重復的值。 JavaScript 專題系列第三篇,講解各種數組去重方法,并且跟著 underscore 寫一個 unique API 前言 數組去重方法老生常談,既然是常談,我也來談談。 雙層循環 也許我們首先想到的是使用 indexOf 來循...
摘要:數組去重,一般都是在面試的時候才會碰到,一般是要求手寫數組去重方法的代碼。如果是被提問到,數組去重的方法有哪些你能答出其中的種,面試官很有可能對你刮目相看。數組去重的方法一利用去重中最常用不考慮兼容性,這種去重的方法代碼最少。 數組去重,一般都是在面試的時候才會碰到,一般是要求手寫數組去重方法的代碼。如果是被提問到,數組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看...
閱讀 1230·2021-11-11 16:54
閱讀 1744·2021-10-13 09:40
閱讀 940·2021-10-08 10:05
閱讀 3503·2021-09-22 15:50
閱讀 3707·2021-09-22 15:41
閱讀 1801·2021-09-22 15:08
閱讀 2345·2021-09-07 10:24
閱讀 3578·2019-08-30 12:52