1.如果不借助任何方法,初級寫法應該是:
function unique(arr));方法二return res;}
var a = [1, 1, '1', '2', 1];
var ans = unique(a);
console.log(ans);
法一是將原陣列中的元素和結果陣列中的元素一一比較,我們可以換個思路,將原陣列中重複元素的最後乙個元素放入結果陣列中。
function unique(a) ;但是如果陣列元素全部是基礎型別的 number 值,鍵值對法應該是最高效的!return a.filter(function(item) ;
for (var i = 0, len = a.length; i
var ans = unique(a);
console.log(ans); // => [object, string]
方法五 (es6)
es6 部署了 set 以及 array.from 方法,太強大了!如果瀏覽器支援,完全可以這樣:
function unique(a) , , new string(1), new number(1)];_.unique最後來看看 underscore 對此的實現方式,underscore 將此封裝到了 _.unique 方法中,呼叫方式為 _.unique(array, [issorted], [iteratee])。其中第乙個引數是必須的,是需要去重的陣列,第二個引數可選,如果陣列有序,則可以傳入布林值 true,第三個引數可選,如果需要對陣列迭代的結果去重,則可以傳入乙個迭代函式。而陣列元素去重是基於 === 運算子的。var ans = unique(a);
console.log(ans); // => [object, object, string, number]
其實很簡單,underscore 中的實現方式和上面的方法一相似。
我們來看它的核心**:
for (var i = 0, length = getlength(array); i length; i++) else if (iteratee) else if (!_.contains(result, value)) {外面的迴圈遍歷陣列元素,對於每個元素,如果陣列有序,則和前乙個元素比較,如果相同,則已經出現過,不加入到結果陣列中,否則則加入。而如果有迭代函式,則計算傳入迭代函式後的值,對值去重,呼叫 .contains 方法,而該方法的核心就是呼叫 .indexof 方法,和我們上面說的方法一異曲同工。// 如果不用經過迭代函式計算,也就不用 seen 變數了
result.push(value);
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...