JavaScript中數(shù)組去重常用的五種方法詳解_第1頁
JavaScript中數(shù)組去重常用的五種方法詳解_第2頁
JavaScript中數(shù)組去重常用的五種方法詳解_第3頁
JavaScript中數(shù)組去重常用的五種方法詳解_第4頁
JavaScript中數(shù)組去重常用的五種方法詳解_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第JavaScript中數(shù)組去重常用的五種方法詳解目錄1.對象屬性(indexof)2.newSet(數(shù)組)3.newMap()4.filter()+indexof5.reduce()+includes補充原數(shù)組

constarr=[1,1,1,17,true,true,false,false,true,a,{},{}];

1.對象屬性(indexof)

利用對象屬性key排除重復項

遍歷數(shù)組,每次判斷新數(shù)組中是否存在該屬性,不存在就存儲在新數(shù)組中

并把數(shù)組元素作為key,最后返回新數(shù)組

這個方法的優(yōu)點是效率高,缺點是使用了額外空間

varnewArr

=[];

arr.forEach((key,index)={

if(newArr.indexOf(key)===-1){

newArr.push(key)

console.log(newArr);//

[1,'1',17,true,false,'true','a',{},{}]

2.newSet(數(shù)組)

Set是一系列無序、沒有重復值的數(shù)據(jù)集合,傳入一個需要去重的數(shù)組,Set會自動刪除重復的元素

再將Set轉數(shù)組返回。此方法效率高,代碼清晰,缺點是存在兼容性問題

constnewArr=[...newSet(arr)];

console.log(newArr);//[1,'1',17,true,false,'true','a',{},{}]

3.newMap()

利用Map的鍵值對同名覆蓋,再將Map轉數(shù)組

constm=newMap();

for(leti=0;iarr.length;i++){

m.set(arr[i],arr[i]);

constnewArr=[]

m.forEach(function(value,key){

newArr.push(value)

console.log(newArr);//[1,'1',17,true,false,'true','a',{},{}]

4.filter()+indexof

filter把接收的函數(shù)依次作用于每一個數(shù)組項,然后根據(jù)返回值trueorfalse決定是否保留該值

優(yōu)點在于可在去重時插入對元素的操作,可拓展性強

constnewArr=arr.filter(function(item,index,self){

returnself.indexOf(item)===index;

console.log(newArr);//

[1,'1',17,true,false,'true','a',{},{}]

5.reduce()+includes

reduce()把結果繼續(xù)和序列的下一個元素做累加計算

利用reduce遍歷和傳入一個空數(shù)組作為去重后的新數(shù)組,然后內部判斷新數(shù)組中是否存在當前遍歷的元素,不存在就插入新數(shù)組

缺點在于時間消耗多,內存空間也額外占用

constnewArray=arr.reduce((newArr,element)={

if(!newArr.includes(element)){

newArr.push(element);

returnnewArr;

},[]);

注意點:

在數(shù)據(jù)量較低時,以上五個方法無較為明顯的區(qū)別(10000條)

高于10000條時,前兩種方法時間消耗最少,后三種時間消耗依次增加

第一種方法空間占用多,當下很多項目不再考慮低版本游覽器兼容性問題

推薦使用Set()去重方法

補充

當然實現(xiàn)數(shù)組去重還有很多其他的方法,下面小編為大家整理了一些

利用for嵌套for,然后splice去重

functionunique(arr){

for(vari=0;iarr.length;i++){

for(varj=i+1;jarr.length;j++){

if(arr[i]==arr[j]){//第一個等同于第二個,splice方法刪除第二個

arr.splice(j,1);

j--;

returnarr;

vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,

'NaN',0,0,'a','a',{},{}

console.log(unique(arr))

hasOwnProperty

functionunique(arr){

varobj={};

returnarr.filter(function(item,index,arr){

returnobj.hasOwnProperty(typeofitem+item)false:(obj[typeofitem+item]=true)

}

利用遞歸去重

functionunique(arr){

vararray=arr;

varlen=array.length;

array.sort(function(a,b){//排序后更加方便去重

returna-b;

})

functionloop(index){

if(index=1){

if(array[index]===array[index-1]){

array.splice(index,1);

}

loop(index-1);//遞歸loop,然后數(shù)組去重

}

}

loop(len-1);

returnarray;

}

vararr=[1,1,'true','true',tr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論