国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript數組去重—ES6的兩種方式

Clect / 1722人閱讀

摘要:數組的方法方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素??蛇x,執行函數時的值。刪除所有的鍵值對,沒有返回值。返回一個布爾值,表示某個鍵是否在當前對象之中。

說明

JavaScript數組去重這個問題,經常出現在面試題中,以前也寫過一篇數組去重的文章,(JavaScript 數組去重的多種方法原理詳解)但感覺代碼還是有點不夠簡單,今天和大家再說兩種方法,代碼可是足夠的少了。

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

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

Map對象

Map是ES6 提供的新的數據結構。 
Map 對象保存鍵值對。任何值(對象或者原始值) 都可以作為一個鍵或一個值。

下表列出了 Map 對象的方法。

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

Map對象還有一個size屬性,他返回Map對象的鍵/值對的數量。

數組的 filter() 方法

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

語法:

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

參數說明:

箭頭函數

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、箭頭函數寫代碼擁有更加簡潔的語法;
2、不會綁定this。

了解更多,點這里

方法一 分析

function unique(arr) {
    //定義常量 res,值為一個Map對象實例
    const res = new Map();
    
    //返回arr數組過濾后的結果,結果為一個數組
    //過濾條件是,如果res中沒有某個鍵,就設置這個鍵的值為1
    return arr.filter((a) => !res.has(a) && res.set(a, 1))
}
方法二:
function unique(arr) {
    return Array.from(new Set(arr))
}

這個方法的代碼量更少,簡直不可思議。
數組的 from方法

Array.from() 方法從一個類似數組或可迭代的對象(包括 Array,Map,Set,String,TypedArray,arguments 對象等等) 中創建一個新的數組實例

語法:

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

示例代碼:

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

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

Set對象

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

語法:

new Set([iterable]);

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

下表列出了 Set 對象的方法。

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

Set對象和Map對象一樣,都有一個size屬性,他返回Set對象的值的個數。

方法二 分析

function unique(arr) {
    //通過Set對象,對數組去重,結果又返回一個Set對象
    //通過from方法,將Set對象轉為數組
    return Array.from(new Set(arr))
}
總結

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

經人提醒,再補充一種,[...new Set(arr)]

不懂 ... 的朋友,可以看這里 js擴展運算符

參考

ES6新特性:Javascript中的Map和WeakMap對象
http://www.cnblogs.com/dilige...
Set和Map數據結構
http://es6.ruanyifeng.com/#do...
MDN
https://developer.mozilla.org...
Array filter()
http://www.runoob.com/jsref/j...
Array.from()
https://developer.mozilla.org...
JavaScript初學者必看“箭頭函數”
http://www.cnblogs.com/fundeb...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/112667.html

相關文章

  • JavaScript數組去重ES6兩種方式

    摘要:數組的方法方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素??蛇x,執行函數時的值。刪除所有的鍵值對,沒有返回值。返回一個布爾值,表示某個鍵是否在當前對象之中。 說明 JavaScript數組去重這個問題,經常出現在面試題中,以前也寫過一篇數組去重的文章,(JavaScript 數組去重的多種方法原理詳解)但感覺代碼還是有點不夠簡單,今天和大家再說兩種方法,代碼...

    FrancisSoung 評論0 收藏0
  • JavaScript數組去重ES6兩種方式

    摘要:數組的方法方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素??蛇x,執行函數時的值。刪除所有的鍵值對,沒有返回值。返回一個布爾值,表示某個鍵是否在當前對象之中。 說明 JavaScript數組去重這個問題,經常出現在面試題中,以前也寫過一篇數組去重的文章,(JavaScript 數組去重的多種方法原理詳解)但感覺代碼還是有點不夠簡單,今天和大家再說兩種方法,代碼...

    lijinke666 評論0 收藏0
  • es6學習之map和set

    摘要:和定義一組鍵值對的集合它是一組鍵值對的數據結構,由于之前的鍵必須是字符串。 Map和Set Map 定義:一組鍵值對的集合 它是一組鍵值對的數據結構,由于之前javascript的鍵(key)必須是字符串。為了使鍵可以是多種類型的于是在最新的es6中引入了map這種數據結構,這樣可以加快查詢速度,類似于查字典 方法和屬性 var m = map() //空map m.set(學生年齡,...

    lvzishen 評論0 收藏0
  • 學習筆記: JS數組

    摘要:數組元素甚至可以是對象或其它數組。它執行的是淺拷貝,這意味著如果數組元素是對象,兩個數組都指向相同的對象,對新數組中的對象修改,會在舊的數組的相同對象中反應出來。 JS中的數組是弱類型的,數組中可以含有不同類型的元素。數組元素甚至可以是對象或其它數組。JS引擎一般會優化數組,按索引訪問數組常常比訪問一般對象屬性明顯迅速。數組長度范圍 from 0 to 4,294,967,295(2^...

    archieyang 評論0 收藏0

發表評論

0條評論

Clect

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<