溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ES6中數(shù)組去重的方法

發(fā)布時(shí)間:2020-12-17 10:09:27 來源:億速云 閱讀:563 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)ES6中數(shù)組去重的方法的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

ES6中數(shù)組去重的兩種方式

方法一:

function unique(arr) {
    const res = new Map();
    return arr.filter((a) => !res.has(a) && res.set(a, 1))
}

就這么短,就可以了,我們來解釋一下為什么。

Map對(duì)象

Map是ES6 提供的新的數(shù)據(jù)結(jié)構(gòu)。
Map 對(duì)象保存鍵值對(duì)。任何值(對(duì)象或者原始值) 都可以作為一個(gè)鍵或一個(gè)值。

下表列出了 Map 對(duì)象的方法。

方法描述
clear刪除所有的鍵/值對(duì),沒有返回值。
delete刪除某個(gè)鍵,返回true。如果刪除失敗,返回false。
forEach對(duì)每個(gè)元素執(zhí)行指定操作。
get返回Map對(duì)象key相對(duì)應(yīng)的value值。
has返回一個(gè)布爾值,表示某個(gè)鍵是否在當(dāng)前 Map 對(duì)象之中。
set給Map對(duì)象設(shè)置key/value 鍵/值對(duì)。

Map對(duì)象還有一個(gè)size屬性,他返回Map對(duì)象的鍵/值對(duì)的數(shù)量。

數(shù)組的 filter() 方法

filter() 方法創(chuàng)建一個(gè)新的數(shù)組,新數(shù)組中的元素 是 通過檢查 指定數(shù)組 中 符合條件的所有元素。

語法:

array.filter(function(currentValue,index,arr), thisValue)

參數(shù)說明:  

ES6中數(shù)組去重的方法

箭頭函數(shù)

return arr.filter((a) => !res.has(a) && res.set(a, 1))
//上面的代碼可以改成這樣
return arr.filter(function(a){
    return !res.has(a) && res.set(a, 1);
});
1、箭頭函數(shù)寫代碼擁有更加簡(jiǎn)潔的語法;
2、不會(huì)綁定this。

了解更多,點(diǎn)這里

方法一 分析

function unique(arr) {
    //定義常量 res,值為一個(gè)Map對(duì)象實(shí)例
    const res = new Map();
    
    //返回arr數(shù)組過濾后的結(jié)果,結(jié)果為一個(gè)數(shù)組
    //過濾條件是,如果res中沒有某個(gè)鍵,就設(shè)置這個(gè)鍵的值為1
    return arr.filter((a) => !res.has(a) && res.set(a, 1))
}

方法二:

function unique(arr) {
    return Array.from(new Set(arr))
}

這個(gè)方法的代碼量更少,簡(jiǎn)直不可思議。  
數(shù)組的 from方法

Array.from() 方法從一個(gè)類似數(shù)組或可迭代的對(duì)象(包括 Array,Map,Set,String,TypedArray,arguments 對(duì)象等等) 中創(chuàng)建一個(gè)新的數(shù)組實(shí)例

語法:

Array.from(arrayLike[, mapFn[, thisArg]])
參數(shù)描述
arrayLike必需,想要轉(zhuǎn)換成真實(shí)數(shù)組的類數(shù)組對(duì)象或可迭代的對(duì)象。
mapFn可選,如果指定了該參數(shù),則最后生成的數(shù)組會(huì)經(jīng)過該函數(shù)的加工處理后再返回。
thisArg可選,執(zhí)行 mapFn 函數(shù)時(shí) this 的值。

示例代碼:

const bar = ["a", "b", "c"];
Array.from(bar);
// ["a", "b", "c"]

Array.from('foo');
// ["f", "o", "o"]

Set對(duì)象

Set 對(duì)象允許你存儲(chǔ)任何類型的 唯一值 ,無論是原始值或者是對(duì)象引用。
Set對(duì)象是值的集合,你可以按照插入的順序迭代它的元素。
Set中的元素只會(huì)出現(xiàn)一次,即 Set 中的元素是唯一的。

語法:

new Set([iterable]);

參數(shù):  
iterable,如果傳遞一個(gè)可迭代對(duì)象(包括 Array,Map,Set,String,TypedArray,arguments 對(duì)象等等),它的所有元素將被添加到新的 Set中。如果不指定此參數(shù)或其值為null,則新的 Set為空。

下表列出了 Set 對(duì)象的方法。

方法描述
add添加某個(gè)值,返回Set對(duì)象本身。
clear刪除所有的鍵/值對(duì),沒有返回值。
delete刪除某個(gè)鍵,返回true。如果刪除失敗,返回false。
forEach對(duì)每個(gè)元素執(zhí)行指定操作。
has返回一個(gè)布爾值,表示某個(gè)鍵是否在當(dāng)前 Set 對(duì)象之中。

Set對(duì)象和Map對(duì)象一樣,都有一個(gè)size屬性,他返回Set對(duì)象的值的個(gè)數(shù)。

方法二 分析

function unique(arr) {
    //通過Set對(duì)象,對(duì)數(shù)組去重,結(jié)果又返回一個(gè)Set對(duì)象
    //通過from方法,將Set對(duì)象轉(zhuǎn)為數(shù)組
    return Array.from(new Set(arr))
}

總結(jié)

這次說的兩個(gè)方法,真的很簡(jiǎn)單,主要就是靠ES6里的新東西,難度不大,代碼簡(jiǎn)單,主要就是多用用就好了。


經(jīng)人提醒,再補(bǔ)充一種,[...new Set(arr)]  

ES6中數(shù)組去重的方法

不懂 ...  的朋友,可以看這里 js擴(kuò)展運(yùn)算符

感謝各位的閱讀!關(guān)于ES6中數(shù)組去重的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI