JS陣列去重的6種演算法實現

2021-08-27 20:52:30 字數 3500 閱讀 7099

1.遍歷陣列法

最簡單的去重方法,實現思路:新建一新陣列,遍歷傳入陣列,值不在新陣列就加入該新陣列中;注意點:判斷值是否在陣列的方法「indexof」是ecmascript5 方法,ie8以下不支援,需多寫一些相容低版本瀏覽器**,原始碼如下:

var arr = [1,3,5,7,9,1,9,5,9,3,5,11,13];function unique1(array)}return newarr;}

console.log(unique1(arr));

效果如下:

2.物件鍵值對法

該方法執行的速度比其他任何方法都快, 就是占用的記憶體大一些,實現思路:新建一js物件以及新陣列,遍歷傳入陣列時,判斷值是否為js物件的鍵,不是的話給物件新增該鍵並放入新陣列。注意 點: 判斷是否為js物件鍵時,會自動對傳入的鍵執行「tostring()」,不同的鍵可能會被誤認為一樣;例如: a[1]、a["1"] 。解決上述問題還是得調「indexof」。

var arr = [1,3,5,7,9,1,9,5,9,3,5,11,13];// 速度最快, 佔空間最多(空間換時間)function unique2(array),newarr=,val,type;for(var i=0;ival=array[i];

//判斷val是什麼資料型別

type=typeof val;

console.log("判斷型別"+[type]);

//判斷值是否為js物件的鍵,不是的話給物件新增該鍵並放入新陣列

if(!json[val])

else if(json[val].indexof(type)<0)

}

return newarr;

}

console.log(unique2(arr));

效果如下:

3.陣列下標判斷法

還是得呼叫「indexof」效能跟方法1差不多,實現思路:如果當前陣列的第i項在當前陣列中第一次出現的位置不是i,那麼表示第i項是重複的,忽略掉。否則存入結果陣列。

var arr = [1,3,5,7,9,1,3,5];function unique3(array)return n;}console.log(unique3(arr));

效果如下:

4.排序後相鄰去除法

雖然原生陣列的」sort」方法排序結果不怎麼靠譜,但在不注重順序的去重里該缺點毫無影響。實現思路:給傳入陣列排序,排序後相同值相鄰,然後遍歷時新陣列只加入不與前一值重複的值。

// 思路:獲取沒重複的最右一值放入新陣列var arr = [1,3,5,7,9,1,3,5];function unique5(array)return r;

}

console.log(unique5(arr));

效果如下:

6.通過hash表

思路如下:

hash是乙個物件,則存在鍵值對(key:value),只不過現在是為空的,所以hash[key] = value;

1:i=0;this[i]=this[0]=1; hash[this[0]] = hash[1] , 因為hash初始為空,沒有找到key=1的值,所以然後undefined,

2:hash[1] = true(此時hash物件就有了第一組鍵值對),將原陣列的第乙個數新增到新陣列中,重複第一步

3:因為不重複的判斷hash的值都是undefined,而重複的都為true了,所以不重複都被新增到新陣列中

4: 因為hash表存的值是存的位址,放在堆記憶體中,所以有多少個不重複的元素,就要分多少個記憶體來存放,所以這種方法比較佔記憶體,但是相比之下,這種的運算運動是最快的,

5 :這也就是用空間來換取時間了,資料量比較小,推薦用此方法

var arr = [1,'b','b',4,3,3,4,5,1];array.prototype.unique2 = function(); //定義乙個hash表var arr1 = ; //定義乙個新陣列for(var i=0;iif(! hash[this[i]])

}

return arr1;

}

console.log(arr);

console.log(arr.unique2());

效果如下:

JS陣列去重的6種演算法實現

1.遍歷陣列法 最簡單的去重方法,實現思路 新建一新陣列,遍歷傳入陣列,值不在新陣列就加入該新陣列中 注意點 判斷值是否在陣列的方法 indexof 是ecmascript5 方法,ie8以下不支援,需多寫一些相容低版本瀏覽器 原始碼如下 var arr 1,3,5,7,9,1,9,5,9,3,5,...

JS陣列去重的6種演算法實現

1.遍歷陣列法 最簡單的去重方法,實現思路 新建一新陣列,遍歷傳入陣列,值不在新陣列就加入該新陣列中 注意點 判斷值是否在陣列的方法 indexof 是ecmascript5 方法,ie8以下不支援,需多寫一些相容低版本瀏覽器 原始碼如下 var arr 1,3,5,7,9,1,9,5,9,3,5,...

JS實現陣列去重的方法(6種)

方法一 雙層迴圈,外層迴圈元素,內層迴圈時比較值 如果有相同的值則跳過,不相同則push進陣列?1 2345 6789 1011 1213 1415 1617 18array.prototype.distinct function result.push arr i returnresult var...