JS陣列去重方法

2021-10-09 07:51:16 字數 3272 閱讀 4263

將陣列var arr = [1,1,『true』,『true』,true,true,15,15,false,false, undefined,undefined, null,null, nan, nan,『nan』, 0, 0, 『a』, 『a』,{},{}]中重複的值過濾掉

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

(arr)

;// (13)[1, "true", true, 15, false, undefined, null, nan, "nan", 0, "a", , ]

123456789

該方法可以說是最完美的方法,就是需要環境支援es6

建立乙個空map資料結構,遍歷需要去重的陣列,把陣列的每乙個元素作為key存到map中。由於map中不會出現相同的key值,所以最終得到的就是去重後的結果。

function

arr_unique2

(arr)

else

}return array ;

} console.

log(

arr_unique2

(arr));

//(13) [1, "a", "true", true, 15, false, 1, , null, nan, nan, "nan", 0, "a", , undefined]

123456789101112131415

function

arr_unique3

(arr)

)function

loop

(index)

loop

(index -1)

;//遞迴loop,然後陣列去重}}

loop

(len-1)

;return array;}

console.

log(

arr_unique3

(arr));

//(14) [1, "a", "true", true, 15, false, 1, , null, nan, nan, "nan", 0, "a", , undefined]

1234567891011121314151617181920

function

arr_unique4

(arr)})

;return res;

}console.

log(

arr_unique4

(arr));

// (14) [1, "true", true, 15, false, undefined, null, nan, nan, "nan", 0, "a", , ]

1234567891011

該方法的不足之處在於無法對nan進行過濾,原因是var a = [1, nan , 2]; a.indexof(nan) === -1;,改善的方法是使用includes方法

function

arr_unique5

(arr));

}arr_unique5

(arr)

;// (12) [1, "true", true, 15, false, undefined, null, "nan", 0, "a", , ]

1234567

美中不足的地方在於漏掉了nan,原因同方法四

function

arr_unique6

(arr)})

;return res;

}arr_unique6

(arr)

;// (13) [1, "true", true, 15, false, undefined, null, nan, "nan", 0, "a", , ]

12345678910

該方法也算是比較完美,沒有什麼遺漏的地方

function

arr_unique7

(arr)

return prev;},

);}arr_unique7

(arr)

;// (13)[1, "true", true, 15, false, undefined, null, nan, "nan", 0, "a", , ]

123456789

function

arr_unique8

(arr)}}

return arr;

}arr_unique8

(arr)

;// (14) [1, "true", true, 15, false, undefined, null, nan, nan, "nan", 0, "a", , ]

1234567891011

這是最麻煩的方法,效率十分低下,每乙個迴圈都會去動態獲取陣列的length。且該方法無法過濾掉nan,因為nan === nan的結果為false。

function

arr_unique9

(arr)

;return arr.

filter

((val)

=>);

}arr_unique9

(arr)

;// (12) [1, "true", true, 15, false, undefined, null, nan, "nan", 0, "a", ]

1234567

這種方法是終極版的,因為它可以進行陣列中的物件元素的去重!前面的幾種方法是不可以進行物件去重的。不過話說回來,js中的物件是本身就是乙個位址的引用,比如 {} == {} ;//false,兩者是兩個不同的物件,這裡我將其進行json.stringify進行簡化。

經親測,使用es6的set和map效率最高,reduce()和sort()效率還可以,雙層迴圈效率最低。

js陣列去重方法

var arr 1,2,3,4,5,1,2,3 function norepeat arr console.log norepeat arr 結果 1,2,3,4,5 arr.indexof val 這個方法會獲取val所在arr的下標 返回為 true 說明 獲取下標後和index下標對比如果 i...

JS陣列去重方法

var arr 1,2,1,2 定義乙個空陣列 var arr1 遍歷原始陣列,若新陣列中沒有這個元素,那麼就將該元素新增到新陣列中 for var i 0 i方法一 二維陣列中,是否可以用上面的方法呢?答案是否定的。js的indeof啊返回字串字元或陣列中某個元素的位置,它的內部是遍歷這個陣列看是...

js 陣列去重方法

1.陣列遞迴去重 運用遞迴的思想 先排序,然後從最後開始比較,遇到相同,則刪除 array.prototype.distinct function function loop index loop index 1 遞迴loop函式進行去重 loop len 1 return arr var a 1,...