TODO 1 6種陣列去重方法 面試題

2021-07-22 07:44:36 字數 1202 閱讀 9335

前兩天看到有乙個人在總結面試的時候寫到問到了陣列去重,說是方法很多。一時手癢把我能想到的都寫出來了。

1、最傳統的方法,「鏈式」檢索,這個方法雖說是雙層for迴圈巢狀,但是能夠保留陣列原有的順序,對於有順序要求的可以用這個,而且可以相容低版本瀏覽器。

let ary = [2,324,35,2,36,1,2,5,3,51,31,2,5,2,24,5,46,789,0,'2','2'];

function uniq (ary)

} !isrepeat && res.push(ary[i])

} return res;

}

2、利用物件的屬性不能重複的特性,但是物件的屬性不能保留定義的時候的順序,所以這個方法會破壞原有陣列的順序。

tips:為了防止太多重複,之後的**都只寫關鍵部分,同時用了箭頭函式。

let obj = {};

ary.foreach(e=>

return true;

})

3、在陣列中檢索,能夠被檢索到便認為是重複,思路感覺跟第乙個方法略有些相似

res.push(ary[0]);

ary.foreach(e=>

})

4、先將陣列排序,將相鄰相同的值去掉,但是這個只適用於資料型別一致的陣列。當然也破壞了原有的陣列,如果想要不破壞資料來源,可以先拷貝乙份。

ary.sort().foreach((e, i, array)=>)
5、利用資料的篩選和some等方法,主要思路同方法一,但是這個方法的效率應該是不如方法一的,畢竟每次都要拷貝乙個新的陣列。

ary.filter((e, i, array)=>!array.slice(i+1).some(ele=>ele === e));
如果想要保證原有的順序,可以先倒序陣列。

ary.reverse().filter((e, i, array)=>!array.slice(i+1).some(ele=>ele === e)).reverse();
6、最後乙個是es6提供的新的資料結構set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值。

res = [ ...new set(ary)];
哈哈,是不是看起來炒雞棒!

面試題 4種陣列去重的方法

陣列去重或者其衍生作為筆試題或者機試題出現的機率也是很大的,寫出的方法越多,則讓面試官覺得你思維越開闊,那麼成功的機率當然就大了。廢話不多說,下面來說說下面我整理的4中陣列去重的方法 方法一 findinarr方法 select方法組合 findinarr 查詢乙個數在當前陣列中是否存在,存在返回t...

幾種陣列去重方法

使用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...

多種陣列去重的方法

陣列內都是數字方法 1.建立乙個空陣列,用於存放不重複的值 2.給陣列排序 3.用遞迴相鄰逐個對比,如果不相同,則push到建立的空陣列裡面去 var a 1,2,5,6,2,1,0,2,8,4,56,4,65,4 var n var s a.sort function a,b function c...