JS實現(xiàn)數組去重的11種方法總結_第1頁
JS實現(xiàn)數組去重的11種方法總結_第2頁
JS實現(xiàn)數組去重的11種方法總結_第3頁
JS實現(xiàn)數組去重的11種方法總結_第4頁
JS實現(xiàn)數組去重的11種方法總結_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第JS實現(xiàn)數組去重的11種方法總結目錄1.ES5常用:利用for嵌套for,然后splice去重2.ES6常用:Set去重3.indexOf去重4.sort()排序5.對象屬性不能相同(不建議)6.includes()7.hasOwnProperty8.filter9.利用遞歸去重10.Map去重11.reduce+includes

1.ES5常用:利用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))

解析:兩個null消失,NaN和{}沒有去重

2.ES6常用:Set去重

functionunique(arr){

returnArray.from(newSet(arr))

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))

解析:去重代碼少。但是無法去除{}空對象。

3.indexOf去重

functionunique(arr){

if(!Array.isArray(arr)){

console.log('typeerror!')

return

vararray=[];//新建空數組,for循環(huán)原數組,判斷數組是否存在當前元素,如果相同的值跳過,不同push進數組

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

if(array.indexOf(arr[i])===-1){

array.push(arr[i])

returnarray;

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))

解析:NaN、{}沒有去重

4.sort()排序

//排序后的結果,遍歷對比

functionunique(arr){

if(!Array.isArray(arr)){

console.log('typeerror!')

return

arr=arr.sort()

vararrray=[arr[0]];

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

if(arr[i]!==arr[i-1]){

arrray.push(arr[i]);

returnarrray

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))

解析:NaN、{}沒有去重

5.對象屬性不能相同(不建議)

functionunique(arr){

if(!Array.isArray(arr)){

console.log('typeerror!')

return

vararray=[];

varobj={};

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

if(!obj[arr[i]]){

array.push(arr[i])

obj[arr[i]]=1

}else{

obj[arr[i]]++

returnarray;

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))

解析:兩個true去掉,NaN和{}沒有去重

6.includes()

functionunique(arr){

if(!Array.isArray(arr)){

console.log('typeerror!')

return

vararray=[];

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

if(!array.includes(arr[i])){//includes檢測數組是否有某個值

array.push(arr[i]);

returnarray

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))

解析:{}沒有去重

7.hasOwnProperty

functionunique(arr){

varobj={};

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

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

}

解析:所有都去重

8.filter

functionunique(arr){

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

//當前元素,在原始數組中的第一個索引==當前索引值,否則返回當前元素

returnarr.indexOf(item,0)===index;

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))

解析:{}沒有去重、NaN兩個都沒有了

9.利用遞歸去重

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,然后數組去重

}

}

loop(len-1);

returnarray;

}

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))

解析:NaN和{}沒有去重

10.Map去重

functionarrayNonRepeatfy(arr){

letmap=newMap();

letarray=newArray();//數組用于返回結果

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

if(map.has(arr[i])){//如果有該key值

map.set(arr[i],true);

}else{

map.set(arr[i],false);//如果沒有該key值

array.push(arr[i]);

returnarray;

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

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

console.log(arrayNonRepeatfy(arr))

解析:創(chuàng)建一個空Map數據結構,遍歷需要去重的數組,把數組的每一個元素作為key存到Map中。由于Map中不會出現(xiàn)相同的key值,所以最終得到的就是去重后的結果。{}空對象無法去重。

11.reduce+includes

functionunique(arr){

returnarr.reduce((prev,cur)=prev.includes(cur)prev:[...prev,cur],

溫馨提示

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

評論

0/150

提交評論