js陣列去重

2021-08-20 06:45:07 字數 1923 閱讀 2025

1、遍歷 + array.prototype.indexof 去重。

var arr = [1, '1', 1, 'str', nan, nan, null, null, undefined, undefined];

function

deleteduplicate

(a)

var tmp = [ a[0] ];//儲存原陣列第乙個元素

for(var i = 1; i < a.length; i++)

} return tmp;

}deleteduplicate( arr );

//[1, "1", "str", nan, nan, null, undefined]

//無法去重 nan,可以使用 es2016 引進的陣列方法

//[1, 2, nan].includes( nan ) === true

2、對於純數字,純字元陣列,可以利用 js 物件特性,物件鍵唯一且是字元。

var arr = [1, 2, 4, 2, 4, 3, 1];

function

deleteduplicate

(a)

var obj = {}, tmp = ;

for(var i = 0; i < a.length; i++)

for( var key in obj )

return tmp;

}deleteduplicate( arr );

//[1, 2, 3, 4]

//由於傳統物件的鍵為字元,obj[1] 和 obj['1'] 是一樣的效果,且無法保證原始順序

3、es6 提供了 map 資料結構。它類似於物件,也是鍵值對的集合,但是「鍵」的範圍不限於字串,各種型別的值(包括物件)都可以當作鍵。也就是說,object 結構提供了「字串—值」的對應,map 結構提供了「值—值」的對應,是一種更完善的 hash 結構實現。如果你需要「鍵值對」的資料結構,map 比 object 更合適,並且 map 的遍歷順序就是插入順序。

let arr = [nan, 1, [1], [1], 1, '1', 4, 1, 2, 4, 5, 5, nan, nan, null, null, undefined, undefined];

function

deleteduplicate

(a)

let map = new map();

a.foreach( value => map.set(value, value) );

return

array.from( map.values() );// return [ ...map.values() ];

}deleteduplicate( arr );

//[nan, 1, array(1), array(1), "1", 4, 2, 5, null, undefined]

//map 的遍歷順序就是插入順序

4、es6 提供了新的資料結構 set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值。

let arr = [nan, 1, [1], [1], 1, '1', 4, 1, 2, 4, 5, 5, nan, nan, null, null, undefined, undefined];

function

deleteduplicate

(a)

let set = new set( a );

return

array.from( set );// return [ ...set ];

}deleteduplicate( arr );

//[nan, 1, array(1), array(1), "1", 4, 2, 5, null, undefined]

JS陣列去重,物件去重

例項1根據indexof去重,indexof的好處就是返回的是首次出現的位置,這樣後面即使出現的值一樣,也只能返回第一次出現的索引,當然這個只適用於簡單的陣列 物件陣列去重 const objarr const obj const newobjarr for let i 0 i objarr.len...

js 陣列去重

function unique arr if isrepeated return result 建立乙個新的陣列,迴圈原有的陣列,每取乙個數就迴圈判斷新建的陣列中是否有和這個相等的值,沒有則插入。方法簡單,但是有雙重迴圈,陣列大了之後效率低。所以能一次迴圈解決最好。var str new array...

JS 陣列去重

我總共想出了三種演算法來實現這個目的 array.prototype.unique1 function return n array.prototype.unique2 function r n為hash表,r為臨時陣列 for var i 0 i this.length i 遍歷當前陣列 retu...