摘要:數(shù)組的方法方法創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素是通過檢查指定數(shù)組中符合條件的所有元素??蛇x,執(zhí)行函數(shù)時的值。刪除所有的鍵值對,沒有返回值。返回一個布爾值,表示某個鍵是否在當(dāng)前對象之中。
說明
JavaScript數(shù)組去重這個問題,經(jīng)常出現(xiàn)在面試題中,以前也寫過一篇數(shù)組去重的文章,(JavaScript 數(shù)組去重的多種方法原理詳解)但感覺代碼還是有點不夠簡單,今天和大家再說兩種方法,代碼可是足夠的少了。
解釋 方法一:function unique(arr) { const res = new Map(); return arr.filter((a) => !res.has(a) && res.set(a, 1)) }
就這么短,就可以了,我們來解釋一下為什么。
Map對象
Map是ES6 提供的新的數(shù)據(jù)結(jié)構(gòu)。
Map 對象保存鍵值對。任何值(對象或者原始值) 都可以作為一個鍵或一個值。
下表列出了 Map 對象的方法。
方法 | 描述 |
---|---|
clear | 刪除所有的鍵/值對,沒有返回值。 |
delete | 刪除某個鍵,返回true。如果刪除失敗,返回false。 |
forEach | 對每個元素執(zhí)行指定操作。 |
get | 返回Map對象key相對應(yīng)的value值。 |
has | 返回一個布爾值,表示某個鍵是否在當(dāng)前 Map 對象之中。 |
set | 給Map對象設(shè)置key/value 鍵/值對。 |
Map對象還有一個size屬性,他返回Map對象的鍵/值對的數(shù)量。
數(shù)組的 filter() 方法
filter() 方法創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素 是 通過檢查 指定數(shù)組 中 符合條件的所有元素。
語法:
array.filter(function(currentValue,index,arr), thisValue)
參數(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ù)寫代碼擁有更加簡潔的語法;
2、不會綁定this。
了解更多,點這里
方法一 分析
function unique(arr) { //定義常量 res,值為一個Map對象實例 const res = new Map(); //返回arr數(shù)組過濾后的結(jié)果,結(jié)果為一個數(shù)組 //過濾條件是,如果res中沒有某個鍵,就設(shè)置這個鍵的值為1 return arr.filter((a) => !res.has(a) && res.set(a, 1)) }方法二:
function unique(arr) { return Array.from(new Set(arr)) }
這個方法的代碼量更少,簡直不可思議。
數(shù)組的 from方法
Array.from() 方法從一個類似數(shù)組或可迭代的對象(包括 Array,Map,Set,String,TypedArray,arguments 對象等等) 中創(chuàng)建一個新的數(shù)組實例
語法:
Array.from(arrayLike[, mapFn[, thisArg]])
參數(shù) | 描述 |
---|---|
arrayLike | 必需,想要轉(zhuǎn)換成真實數(shù)組的類數(shù)組對象或可迭代的對象。 |
mapFn | 可選,如果指定了該參數(shù),則最后生成的數(shù)組會經(jīng)過該函數(shù)的加工處理后再返回。 |
thisArg | 可選,執(zhí)行 mapFn 函數(shù)時 this 的值。 |
示例代碼:
const bar = ["a", "b", "c"]; Array.from(bar); // ["a", "b", "c"] Array.from("foo"); // ["f", "o", "o"]
Set對象
Set 對象允許你存儲任何類型的 唯一值 ,無論是原始值或者是對象引用。
Set對象是值的集合,你可以按照插入的順序迭代它的元素。
Set中的元素只會出現(xiàn)一次,即 Set 中的元素是唯一的。
語法:
new Set([iterable]);
參數(shù):
iterable,如果傳遞一個可迭代對象(包括 Array,Map,Set,String,TypedArray,arguments 對象等等),它的所有元素將被添加到新的 Set中。如果不指定此參數(shù)或其值為null,則新的 Set為空。
下表列出了 Set 對象的方法。
方法 | 描述 |
---|---|
add | 添加某個值,返回Set對象本身。 |
clear | 刪除所有的鍵/值對,沒有返回值。 |
delete | 刪除某個鍵,返回true。如果刪除失敗,返回false。 |
forEach | 對每個元素執(zhí)行指定操作。 |
has | 返回一個布爾值,表示某個鍵是否在當(dāng)前 Set 對象之中。 |
Set對象和Map對象一樣,都有一個size屬性,他返回Set對象的值的個數(shù)。
方法二 分析
function unique(arr) { //通過Set對象,對數(shù)組去重,結(jié)果又返回一個Set對象 //通過from方法,將Set對象轉(zhuǎn)為數(shù)組 return Array.from(new Set(arr)) }總結(jié)
這次說的兩個方法,真的很簡單,主要就是靠ES6里的新東西,難度不大,代碼簡單,主要就是多用用就好了。
經(jīng)人提醒,再補(bǔ)充一種,[...new Set(arr)]
不懂 ... 的朋友,可以看這里 js擴(kuò)展運(yùn)算符
參考ES6新特性:Javascript中的Map和WeakMap對象
http://www.cnblogs.com/dilige...
Set和Map數(shù)據(jù)結(jié)構(gòu)
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初學(xué)者必看“箭頭函數(shù)”
http://www.cnblogs.com/fundeb...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/112667.html
摘要:數(shù)組的方法方法創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素是通過檢查指定數(shù)組中符合條件的所有元素。可選,執(zhí)行函數(shù)時的值。刪除所有的鍵值對,沒有返回值。返回一個布爾值,表示某個鍵是否在當(dāng)前對象之中。 說明 JavaScript數(shù)組去重這個問題,經(jīng)常出現(xiàn)在面試題中,以前也寫過一篇數(shù)組去重的文章,(JavaScript 數(shù)組去重的多種方法原理詳解)但感覺代碼還是有點不夠簡單,今天和大家再說兩種方法,代碼...
摘要:數(shù)組的方法方法創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素是通過檢查指定數(shù)組中符合條件的所有元素??蛇x,執(zhí)行函數(shù)時的值。刪除所有的鍵值對,沒有返回值。返回一個布爾值,表示某個鍵是否在當(dāng)前對象之中。 說明 JavaScript數(shù)組去重這個問題,經(jīng)常出現(xiàn)在面試題中,以前也寫過一篇數(shù)組去重的文章,(JavaScript 數(shù)組去重的多種方法原理詳解)但感覺代碼還是有點不夠簡單,今天和大家再說兩種方法,代碼...
摘要:和定義一組鍵值對的集合它是一組鍵值對的數(shù)據(jù)結(jié)構(gòu),由于之前的鍵必須是字符串。 Map和Set Map 定義:一組鍵值對的集合 它是一組鍵值對的數(shù)據(jù)結(jié)構(gòu),由于之前javascript的鍵(key)必須是字符串。為了使鍵可以是多種類型的于是在最新的es6中引入了map這種數(shù)據(jù)結(jié)構(gòu),這樣可以加快查詢速度,類似于查字典 方法和屬性 var m = map() //空map m.set(學(xué)生年齡,...
摘要:數(shù)組元素甚至可以是對象或其它數(shù)組。它執(zhí)行的是淺拷貝,這意味著如果數(shù)組元素是對象,兩個數(shù)組都指向相同的對象,對新數(shù)組中的對象修改,會在舊的數(shù)組的相同對象中反應(yīng)出來。 JS中的數(shù)組是弱類型的,數(shù)組中可以含有不同類型的元素。數(shù)組元素甚至可以是對象或其它數(shù)組。JS引擎一般會優(yōu)化數(shù)組,按索引訪問數(shù)組常常比訪問一般對象屬性明顯迅速。數(shù)組長度范圍 from 0 to 4,294,967,295(2^...
閱讀 2203·2021-11-15 11:38
閱讀 1164·2021-09-06 15:02
閱讀 3404·2021-08-27 13:12
閱讀 1372·2019-08-30 14:20
閱讀 2410·2019-08-29 15:08
閱讀 651·2019-08-29 14:08
閱讀 1736·2019-08-29 13:43
閱讀 1472·2019-08-26 12:11