面试题——4种数组去重的方法
數(shù)組去重或者其衍生作為筆試題或者機(jī)試題出現(xiàn)的幾率也是很大的,寫出的方法越多,則讓面試官覺得你思維越開闊,那么成功的幾率當(dāng)然就大了。
廢話不多說(shuō),下面來(lái)說(shuō)說(shuō)下面我整理的4中數(shù)組去重的方法
方法一: findInArr方法+select方法組合
findInArr : 查找一個(gè)數(shù)在當(dāng)前數(shù)組中是否存在,存在返回true,找完所有沒有找到,返回false,這個(gè)數(shù)就是我們要操作的那個(gè)數(shù)組
select ? ? ?:循環(huán)數(shù)組,并調(diào)用findInArr方法 查找當(dāng)前arr[i]在arr2中是否存在,如果返回false 那么就把當(dāng)前這個(gè)數(shù) arr[i] ,push到新的數(shù)組 arr2中,最后return arr2
1 function findInArr(n ,arr){ 2 for (var i = 0; i < arr.length; i++) { 3 if (n == arr[i]) { 4 return true; 5 } 6 } 7 return false; 8 } 9 function select (arr){ 10 var arr2 = []; 11 for(var i = 0; i < arr.length; i++){ 12 if (!findInArr(arr[i],arr2)) { 13 arr2.push(arr[i]); 14 } 15 } 16 return arr2; 17 } View Code方法二 :利用json特性?
創(chuàng)建一個(gè)空的json,通過(guò)對(duì)key的檢索,---> !json[arr[i]],取反說(shuō)明不存在
這樣我們可以對(duì)其進(jìn)行賦值,json[arr[i]] = true; ?對(duì)于 賦什么值,隨意,保證它的鍵值對(duì)就行
并且把當(dāng)前這個(gè)數(shù)push 或者其他方式都行 ,總是添加到新數(shù)組 arr2中,最后return arr2
1 function select (arr){ 2 var json = {}; 3 var arr2 = []; 4 for (var i = 0; i < arr.length; i++) { 5 if (!json[arr[i]]) { 6 json[arr[i]] = true; 7 arr2.push(arr[i]) 8 } 9 } 10 return arr2; 11 } View Code方法三: 相鄰數(shù)比較法,這個(gè)方法前提是先用sort 進(jìn)行簡(jiǎn)單排序,不需要改進(jìn)版的
經(jīng)過(guò)sort排序之后,我們不論它排序是否正確,但是有一點(diǎn)我們能確定,那就是相同的一定被排到了一起
那么我們對(duì)排序之后的數(shù)組遍歷,并且讓當(dāng)前的數(shù)和下一個(gè)數(shù)進(jìn)行比較,如果相等那么用splice(i,1) 方法對(duì)其進(jìn)行刪除,這時(shí)候i的值需要 i--,避免它少比一次,最后return arr;
1 function select(arr){ 2 arr.sort(); 3 for (var i = 0; i < arr.length; i++) { 4 if (arr[i] == arr[i+1]) { 5 arr.splice(i,1) 6 i--; 7 } 8 } 9 return arr; 10 } View Code方法四:使用數(shù)組的indexOf方法 (IE8--不兼容)
通過(guò)判斷arr2.indexOf(arr[i]) == -1 ,來(lái)確定新數(shù)組arr2中沒有arr[i],并將其添加到數(shù)組arr2中,最終返回 arr2
1 function select (arr){ 2 var arr2 = []; 3 for( var i = 0; i < arr.length; i++){ 4 if (arr2.indexOf(arr[i]) == -1) { 5 arr2.push(arr[i]) 6 } 7 } 8 return arr2; 9 } View Code上述四中方法肯定存在的性能的差異,可以從速度上,所占內(nèi)存等進(jìn)行比較,我沒有測(cè)過(guò)所以就不妄加定論。希望測(cè)過(guò)的朋友,能告知 。謝謝
轉(zhuǎn)載于:https://www.cnblogs.com/NTWang/p/6246621.html
總結(jié)
以上是生活随笔為你收集整理的面试题——4种数组去重的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 申请平安银行灵用金需要什么条件?使用时这
- 下一篇: cocos2d-x 帧动画