你可能不知道的JS陣列去重方法

2021-09-12 18:13:17 字數 1555 閱讀 2605

利用es6 set集合成員具有唯一值的特性,再借助array.from將類陣列轉為真正的陣列

我們可以很簡單的完成陣列去重任務

let res = array.from(new set(arr));
indexof():

返回陣列中某個指定的元素第一次出現的位置(索引)。如果在陣列中沒找到指定元素則返回 -1。

filter():

返回指定陣列中符合條件的所有元素

關鍵語句:

index === array.indexof(ele)
我們利用indexof得到的下標與當前元素的下標來判斷這個元素是否是第一次出現,然後在利用filter的過濾特性即可。

這裡需要注意的判斷nan,因為nan !== nan,所以indexof(nan)始終返回-1,所以我們需要額外去判斷

array.prototype.uniq = function()

return index===array.indexof(ele)

})}

核心:利用物件的鍵來儲存我們的元素

如果沒有物件中沒有這個鍵,則進行儲存,並設定這個鍵對應值為true,表明已經存在該元素

array.prototype.uniq = function();

let data = ;

this.foreach(ele =>

})return data;

}

注意:由於普通物件的鍵都是字串,所以對於像number(1)和string(1)則視為它們是同一值,無法正確判斷,對於引用型別的資料也是如此( 如 {} 和 {} 視為同一值)

解決辦法:在es6中提供了map集合,map的鍵不再侷限於字串,而是任意型別,可以說是乙個完整的hash結構,利用map替換普通物件{}則可以解決上面的問題

array.prototype.uniq = function()

});return data;

}

在陣列排序後,相同的資料會集中在一起,因此只需要比較相鄰元素是否相等即可,

比較符可以用嚴格比較運算子(===)或者object.is()

它們不同之處只有兩個:一是+0不等於-0,二是nan等於自身。

所以對於nan,如果使用===,則需要額外判斷

根據如下方案,陣列最後乙個元素必然是唯一值,所以在迴圈後把末尾的元素新增進去

array.prototype.uniq = function()

}res.push(arr.pop());

return res;

}

你可能不知道的JS陣列去重方法

利用es6 set集合成員具有唯一值的特性,再借助array.from將類陣列轉為真正的陣列 我們可以很簡單的完成陣列去重任務 let res array.from new set arr indexof 返回陣列中某個指定的元素第一次出現的位置 索引 如果在陣列中沒找到指定元素則返回 1。filt...

你可能不知道的JS函式

日常業務寫的太多已經麻痺了神經,很多本該知道的知識早已拋之腦後,大家都知道在js中函式是一等公民,但是竟然連它的特性都不清楚,真是慚愧。在日常業務開發中,通常都會在資料中給乙個預設值,然後在請求後端資料後替換掉預設值,如果完全替換整個物件肯能並不是我們想要的,也可能會出現一些為止的錯誤,又或者需要對...

你可能不知道的東西

元素可以分為塊級元素,行內元素以及行內塊級元素。行內元素的margin或者padding只有margin left和margin right以及padding left和padding right有效果,margin top margin bottom padding top padding bot...