第一種是比較常規的方法
思路:
1.構建乙個新的陣列存放結果
2.for迴圈中每次從原陣列中取出乙個元素,用這個元素迴圈與結果陣列對比
3.若結果陣列中沒有該元素,則存到結果陣列中
複製**
**如下:
array.prototype.unique1 = function() }
if(!repeat) }
return res; }
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique1());
第二種方法比上面的方法效率要高
思路:
1.先將原陣列進行排序
2.檢查原陣列中的第i個元素 與 結果陣列中的最後乙個元素是否相同,因為已經排序,所以重複元素會在相鄰位置
3.如果不相同,則將該元素存入結果陣列中
複製**
**如下:
array.prototype.unique2 = function() }
return res; }
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique2());
第二種方法也會有一定的侷限性,因為在去重前進行了排序,所以最後返回的去重結果也是排序後的。如果要求不改變陣列的順序去重,那這種方法便不可取了。
第三種方法(推薦使用)
思路:
1.建立乙個新的陣列存放結果
2.建立乙個空物件
3.for迴圈時,每次取出乙個元素與物件進行對比,如果這個元素不重複,則把它存放到結果陣列中,同時把這個元素的內容作為物件的乙個屬性,並賦值為1,存入到第2步建立的物件中。
說明:至於如何對比,就是每次從原陣列中取出乙個元素,然後到物件中去訪問這個屬性,如果能訪問到值,則說明重複。
複製**
**如下:
array.prototype.unique3 = function();
for(var i = 0; i < this.length; i++) }
return res; }
var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
alert(arr.unique3());
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...