法一:
創建一個新的臨時數組來保存數組中已有的元素,indexOf()可以遍歷數組
var a = new Array(1,2,2,2,2,5,3,2,9,5,6,3); Array.prototype.unique1 = function(){ var n = []; //一個新的臨時數組 for(var i=0; i<this.length; i++){ //如果把當前數組的第i已經保存進了臨時數組, 那么跳過 if(n.indexOf(this[i]) == -1){ n.push(this[i]); } } return n; } console.log(a.unique1());
法二:
使用哈希表存儲已有的元素
Array.prototype.unique2 = function(){ var hash = {}, n = []; //hash 作為哈希表, n為臨時數組 for(var i=0; i<this.length; i++){ if(!hash[this[i]]){ //如果hash表中沒有當前項 hash[this[i]] = true; //存入hash表 n.push(this[i]); //當前元素push到臨時數組中 } } return n; }
法三:
使用indexOf判斷數組元素第一次出現的位置是否為當前位置,indexOf()可以遍歷數組
Array.prototype.unique3 = function(){ var n = [this[0]]; for(var i=1; i<this.length; i++) //從第二項開始遍歷 { //如果當前數組元素在數組中出現的第一次的位置不是i //說明是重復元素 if(this.indexOf(this[i]) == i){ n.push(this[i]); } } return n; }
法四:
先排序再去重
Array.prototype.unique4 = function(){ this.sort(function(a, b){ return a - b;}); var n = [this[0]]; for(var i=1; i<this.length; i++){ if(this[i] != this[i-1]){ n.push(this[i]); } } return n; }
法五:
首先利用 new Set() 把數組去重,但是這個方法會有一個問題,去重之后會變成 偽數組,然后在用 Array.from() 方法把偽數組轉換為數組
var arr = [11,22,33,44,22,33]; var a = new Set(arr); Array.from(a); //輸出結果為 [11,22,33,44]
代碼可以簡化為
var arr = [11,22,33,44,22,33]; Array.from(new Set(arr));