陣列去重或者其衍生作為筆試題或者機試題出現的機率也是很大的,寫出的方法越多,則讓面試官覺得你思維越開闊,那麼成功的機率當然就大了。
廢話不多說,下面來說說下面我整理的4中陣列去重的方法
方法一: findinarr方法+select方法組合
findinarr : 查詢乙個數在當前陣列中是否存在,存在返回true,找完所有沒有找到,返回false,這個數就是我們要操作的那個陣列
select :迴圈陣列,並呼叫findinarr方法 查詢當前arr[i]在arr2中是否存在,如果返回false 那麼就把當前這個數 arr[i] ,push到新的陣列 arr2中,最後return arr2
1view codefunction
findinarr(n ,arr)6}
7return
false;8
}9function
select (arr)15}
16return
arr2;
17 }
方法二 :利用json特性
建立乙個空的json,通過對key的檢索,---> !json[arr[i]],取反說明不存在
這樣我們可以對其進行賦值,json[arr[i]] = true; 對於 賦什麼值,隨意,保證它的鍵值對就行
並且把當前這個數push 或者其他方式都行 ,總是新增到新陣列 arr2中,最後return arr2
1view codefunction
select (arr);
3var arr2 =;
4for (var i = 0; i < arr.length; i++) 9}
10return
arr2;
11 }
方法三: 相鄰數比較法,這個方法前提是先用sort 進行簡單排序,不需要改進版的
經過sort排序之後,我們不論它排序是否正確,但是有一點我們能確定,那就是相同的一定被排到了一起
那麼我們對排序之後的陣列遍歷,並且讓當前的數和下乙個數進行比較,如果相等那麼用splice(i,1) 方法對其進行刪除,這時候i的值需要 i--,避免它少比一次,最後return arr;
1view codefunction
select(arr)8}
9return
arr;
10 }
方法四:使用陣列的indexof方法 (ie8--不相容)
通過判斷arr2.indexof(arr[i]) == -1 ,來確定新陣列arr2中沒有arr[i],並將其新增到陣列arr2中,最終返回 arr2
1view codefunction
select (arr)7}
8return
arr2;
9 }
上述四中方法肯定存在的效能的差異,可以從速度上,所佔記憶體等進行比較,我沒有測過所以就不妄加定論。希望測過的朋友,能告知 。謝謝
TODO 1 6種陣列去重方法 面試題
前兩天看到有乙個人在總結面試的時候寫到問到了陣列去重,說是方法很多。一時手癢把我能想到的都寫出來了。1 最傳統的方法,鏈式 檢索,這個方法雖說是雙層for迴圈巢狀,但是能夠保留陣列原有的順序,對於有順序要求的可以用這個,而且可以相容低版本瀏覽器。let ary 2,324,35,2,36,1,2,5...
js陣列去重 面試題
首先再講陣列去重之前,先引進乙個小的知識點indexof indexof 方法可返回某個指定的字串值在字串中首次出現的位置,eg如下 var arr 1 2,3 4,5 var index arr.indexof 1 1,3,5 console.log index index 輸出的是0 2 4 v...
幾種陣列去重方法
使用es6中的set是最簡單的去重方法。var arr 1 1,true true true true,15 15,false false undefined,undefined,null null nan nan nan 0 0,a a function arr unique1 arr arr u...