js陣列去重

2022-04-03 04:44:18 字數 1469 閱讀 1435

1.如果不借助任何方法,初級寫法應該是:

function unique(arr));

return res;}

var a = [1, 1, '1', '2', 1];

var ans = unique(a);

console.log(ans);

方法二

法一是將原陣列中的元素和結果陣列中的元素一一比較,我們可以換個思路,將原陣列中重複元素的最後乙個元素放入結果陣列中。

function unique(a) ;

return a.filter(function(item) ;

for (var i = 0, len = a.length; i 

var ans = unique(a);

console.log(ans); // => [object, string]

但是如果陣列元素全部是基礎型別的 number 值,鍵值對法應該是最高效的!

方法五 (es6)

es6 部署了 set 以及 array.from 方法,太強大了!如果瀏覽器支援,完全可以這樣:

function unique(a) , , new string(1), new number(1)];

var ans = unique(a);

console.log(ans); // => [object, object, string, number]

_.unique最後來看看 underscore 對此的實現方式,underscore 將此封裝到了 _.unique 方法中,呼叫方式為 _.unique(array, [issorted], [iteratee])。其中第乙個引數是必須的,是需要去重的陣列,第二個引數可選,如果陣列有序,則可以傳入布林值 true,第三個引數可選,如果需要對陣列迭代的結果去重,則可以傳入乙個迭代函式。而陣列元素去重是基於 === 運算子的。

其實很簡單,underscore 中的實現方式和上面的方法一相似。

我們來看它的核心**:

for (var i = 0, length = getlength(array); i  length; i++)  else if (iteratee)  else if (!_.contains(result, value)) {  

// 如果不用經過迭代函式計算,也就不用 seen 變數了

result.push(value);

外面的迴圈遍歷陣列元素,對於每個元素,如果陣列有序,則和前乙個元素比較,如果相同,則已經出現過,不加入到結果陣列中,否則則加入。而如果有迭代函式,則計算傳入迭代函式後的值,對值去重,呼叫 .contains 方法,而該方法的核心就是呼叫 .indexof 方法,和我們上面說的方法一異曲同工。

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