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