日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es6-Set与Map

發布時間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es6-Set与Map 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

se5中的set與map

在est5中開發者使用對象屬性來模擬。set多用于檢查鍵的存在,map多用于提取數據。

{let set = Object.create(null)set.foo = true;//檢查屬性是否存在if (set.foo) {//其他操作}let map = Object.create(null);map.foo = '一個值';let val = map.foo;console.log('map-->:', val); //map-->:一個值' }

在簡單情況下將對象作為map和set來使用都是可行的,但是一旦接觸到對象屬性的局限性,此方式就會遇到更多的麻煩。

{let map1 = Object.create(null),key1 = {},key2 = {};map1[key1] = 'foo';console.log('key2-->:', map1[key2]);let map2 = Object.create(null);map2.count = 1;//是想檢查count的存在,還是非零值?if (map2.count) {//...} }

map1[key1]和map1[key2]引用了同一個值。由于對象屬性只能是string,又因為對象默認的string表達形式是'[object object]'。導致key1和key2被轉換為同一個字符串。map2中count的用法存在歧義。該if語句內的代碼都會被執行因為1被隱式轉換為true。然而count的值為0則會被隱式轉為false。在大型應用中這類問題都是難以確認,難以調試的。這也是新增set和map類型的原因。set類型是一種無重復值的有序列表。set允許對它包含的數進行快速訪問,從而更有效的追蹤各種離散值。

創建set類型

使用new set()來創建。調用add()方法向集合中添加元素,訪問集合的size屬性獲取集合數量。

{let set = new Set();set.add(5);set.add('5');console.log('typeof set-->:', typeof set)console.log('set-->:', set)console.log('size-->:', set.size) }

set不會使用強制類型轉換來判斷值是否重復,這意味著set可以同時包含number(5)和string(5),唯一的例外-0和+0在set中被判定是相等的,如果向set集合中添加多個對象,則他們之間彼此獨立。

{let set = new Set();let key1 = {};let key2 = {};set.add(key1);set.add(key2);console.log('typeof setobject-->:', typeof set)console.log('setobject-->:', set)console.log('size-->:', set.size) }

由于key1和key2不會被轉換為字符串,所以在set內部是不同的項,如果他們被轉化為字符串,那么都會等于"[object object]",如果多次調用add()并傳入相同的值作為參數。那么后續的調用會被忽略。

{let set = new Set();set.add(5);set.add('5');set.add(5);console.log('typeof set-->:', typeof set)console.log('set-->:', set)console.log('size-->:', set.size) }

第二次重復傳入numner(5)并不會被添加到set集合中,那么size的屬性值還是為2。也可以使用數組來初始化set集合。集合同樣會過濾重復的值。

{let set = new Set([1, 2, 3, 4, 5, 5, 5, 5, 5, 5]);console.log('size-->:', set.size); }

通過has()可以檢測set集合中是否存在某個值。

{let set = new Set();set.add(5);set.add('6');console.log('set has-->:', set.has(6));console.log('set has-->:', set.has('6'))console.log('set has-->:', set.has(5))console.log('set has-->:', set.has('5')) }

set集合中相同的number和sting并不會返回true。調用delete()方法可以移除set中的某一個值,調用clear()方法可以移除所有值。

{let set = new Set();set.add(5);set.add('6');console.log('set has-->:', set.has('6'));set.delete('6')console.log('set has-->:', set.has('6'))console.log('size-->:', set.size)set.clear();console.log('size-->:', set.size) }

set集合簡單易用,可以有效的跟蹤多個獨立有序的值。

set的forEach

set集合和數組的forEach類似,運行機制也比較類似。forEach()方法的回調接收3個參數:
1.集合中索引的位置。
2.被遍歷參數的值
3.集合本身

{let set = new Set(['a', 'b', 'c', 'd', 'e']);set.forEach((k, val, owner) => {console.log('set-forEach-k-->:', k);console.log('set-forEach-val-->:', val);console.log('set-forEach-owner-->:', owner);}) }

將set轉換為數組

將數組轉換為set集合的過程很簡單,需要給set集合傳入數組即可。將集合轉回數組,只需要使用展開運算符即可。

{let arr = [1, 2, 3, 4, 5, 5, 5, 5, 5, 5];let set = new Set(arr);let newArr = [...set];//ps: 代碼行數太多可以壓縮下let newArr2 = [...new Set([1, 2, 3, 4, 5, 5, 5, 5, 5, 5])];console.log(newArr, newArr2) }

創建map類型

map類型是鍵值對的有序列表,鍵和值都可以是任意類型,可以調用set()方法傳遞一個鍵和一個關聯的值,來給馬屁添加項;此后使用鍵名來調用get()方法獲取對應的值。

{let map = new Map();map.set('title', 'es6');map.set('year', 2016);console.log('map-title-->', map.get('title'))console.log('map-year-->', map.get('year')) }

map的方法

map和set共享了幾個方法。以下的方法和屬性map和set上都存在:
1.forEach(val, k, owner): 遍歷map
2.has(key):判斷指定的鍵值是否存在
3.delete(key):移除map中鍵以及對應的值
4.clear():移除map中所有的鍵和值
5.size:指明包含多個鍵值對。

{let map = new Map();map.set('title', 'es6');map.set('year', 2016);map.forEach((val, k, owner) => {console.log('map-forEach-k-->:', k);console.log('map-forEach-val-->:', val);console.log('map-forEach-owner-->:', owner);})console.log('map-size-->:', map.size);console.log('map-has-->:', map.has('title'));map.delete('title');console.log('map-->:', map);map.clear();console.log('map-->:', map); }

小結

es6正式將set與map引入。在此之前往往使用對象來模擬,但是由于與對象屬性有關的限制,這么做會經常遇到問題。
這里并沒有弱引用weakset和weakmap,有這方面需要的可以自己去查閱

原文地址:https://segmentfault.com/a/1190000015057978

轉載于:https://www.cnblogs.com/lalalagq/articles/9909954.html

總結

以上是生活随笔為你收集整理的es6-Set与Map的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。