国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

一文搞懂ES6中的Map和Set

2024-05-06 16:51:06
字體:
來源:轉載
供稿:網友

Map

Map對象保存鍵值對。任何值(對象或者原始值) 都可以作為一個鍵或一個值。構造函數Map可以接受一個數組作為參數。

Map和Object的區別

•一個Object 的鍵只能是字符串或者 Symbols,但一個Map 的鍵可以是任意值。

•Map中的鍵值是有序的(FIFO 原則),而添加到對象中的鍵則不是。

•Map的鍵值對個數可以從 size 屬性獲取,而 Object 的鍵值對個數只能手動計算。

•Object 都有自己的原型,原型鏈上的鍵名有可能和你自己在對象上的設置的鍵名產生沖突。

1.Map對象的屬性

•size:返回Map對象中所包含的鍵值對個數

1.Map對象的方法

•set(key, val): 向Map中添加新元素

•get(key): 通過鍵值查找特定的數值并返回

•has(key): 判斷Map對象中是否有Key所對應的值,有返回true,否則返回false

•delete(key): 通過鍵值從Map中移除對應的數據

•clear(): 將這個Map中的所有元素刪除

const m1 = new Map([['a', 111], ['b', 222]])console.log(m1) // {"a" => 111, "b" => 222}m1.get('a') // 111const m2 = new Map([['c', 3]])const m3 = new Map(m2)m3.get('c') // 3m3.has('c') // truem3.set('d', 555)m3.get('d') // 555

1.遍歷方法

•keys():返回鍵名的遍歷器

•values():返回鍵值的遍歷器

•entries():返回鍵值對的遍歷器

•forEach():使用回調函數遍歷每個成員

const map = new Map([['a', 1], ['b', 2]])for (let key of map.keys()) { console.log(key)}// "a"// "b"for (let value of map.values()) { console.log(value)}// 1// 2for (let item of map.entries()) { console.log(item)}// ["a", 1]// ["b", 2]// 或者for (let [key, value] of map.entries()) { console.log(key, value)}// "a" 1// "b" 2// for...of...遍歷map等同于使用map.entries()for (let [key, value] of map) { console.log(key, value)}// "a" 1// "b" 2

1.map與其他數據結構的互相轉換

•map轉換為數組(使用擴展運算符)

const arr = [[{'a': 1}, 111], ['b': 222]]const myMap = new Map(arr)[...myMap] // map轉數組。 [[{'a': 1}, 111], ['b': 222]]•Map與對象的互換const obj = {}const map = new Map(['a', 111], ['b', 222])for(let [key,value] of map) { obj[key] = value}console.log(obj) // {a:111, b: 222}

•JSON字符串要轉換成Map可以先利用JSON.parse()轉換成數組或者對象,然后再轉換即可。

Set

Set對象允許你存儲任何類型的值,無論是原始值或者是對象引用。它類似于數組,但是成員的值都是唯一的,沒有重復的值。

Set 本身是一個構造函數,用來生成Set 數據結構。Set函數可以接受一個數組(或者具有 iterable 接口的其他數據結構)作為參數,用來初始化。

Set中的特殊值

Set 對象存儲的值總是唯一的,所以需要判斷兩個值是否恒等。有幾個特殊值需要特殊對待:

•+0 與 -0 在存儲判斷唯一性的時候是恒等的,所以不重復

•undefined 與 undefined 是恒等的,所以不重復

•NaN 與 NaN 是不恒等的,但是在 Set 中認為NaN與NaN相等,所有只能存在一個,不重復。

1.Set實例對象的屬性

•size:返回Set實例的成員總數。

1.Set實例對象的方法

•add(value):添加某個值,返回 Set 結構本身(可以鏈式調用)。

•delete(value):刪除某個值,刪除成功返回true,否則返回false。

•has(value):返回一個布爾值,表示該值是否為Set的成員。

•clear():清除所有成員,沒有返回值。

const mySet = new Set(['a', 'a', 'b', 1, 2, 1])console.log(mySet) // {'a', 'b', 1, 2}myset.add('c').add({'a': 1})console.log(mySet) // {'a', 'b', 1, 2, 'c', {a: 1}}console.log(mySet.size) // 6mySet.has(2) // true

1.遍歷方法

•keys():返回鍵名的遍歷器。

•values():返回鍵值的遍歷器。
•entries():返回鍵值對的遍歷器。

•forEach():使用回調函數遍歷每個成員。

由于Set結構沒有鍵名,只有鍵值(或者說鍵名和鍵值是同一個值),所以keys方法和values方法的行為完全一致。

const set = new Set(['a', 'b', 'c'])for (let item of set.keys()) { console.log(item)}// a// b// cfor (let item of set.values()) { console.log(item)}// a// b// cfor (let item of set.entries()) { console.log(item)}// ["a", "a"]// ["b", "b"]// ["c", "c"]// 直接遍歷set實例,等同于遍歷set實例的values方法for (let i of set) { console.log(i)}// a// b// cset.forEach((value, key) => console.log(key + ' : ' + value))// a: a// b: b// c: c

1.Set 對象作用

•數組去重(利用擴展運算符)

const mySet = new Set([1, 2, 3, 4, 4])[...mySet] // [1, 2, 3, 4]

•合并兩個set對象

let a = new Set([1, 2, 3])let b = new Set([4, 3, 2])let union = new Set([...a, ...b]) // {1, 2, 3, 4}

•交集

let a = new Set([1, 2, 3])let b = new Set([4, 3, 2])let intersect = new Set([...a].filter(x => b.has(x))) // {2, 3} 利用數組的filter方法

•差集

let a = new Set([1, 2, 3])let b = new Set([4, 3, 2])let difference = new Set([...a].filter(x => !b.has(x))) // {1} 

總結

以上所述是小編給大家介紹的一文搞懂ES6中的Map和Set,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临漳县| 沂南县| 卓资县| 星子县| 民丰县| 邵阳市| 巫溪县| 洪江市| 龙井市| 乌鲁木齐县| 锦屏县| 灌云县| 罗定市| 西城区| 潮州市| 门头沟区| 嘉荫县| 宁城县| 青神县| 安多县| 邵阳市| 肇州县| 淮滨县| 沁源县| 湘潭市| 丹巴县| 绥芬河市| 育儿| 永清县| 封丘县| 信宜市| 资兴市| 泰兴市| 海安县| 宁国市| 岚皋县| 富锦市| 友谊县| 突泉县| 崇文区| 大理市|