精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Map和Set兩種數據結構在ES6的作用

開發 前端
Set是一種叫做集合的數據結構,Map是一種叫做字典的數據結構。集合、字典都可以存儲不重復的值,集合是以[值,值]的形式存儲元素,字典是以[鍵,值]的形式存儲。

[[347780]]

 如果要用一句來描述,我們可以說

Set是一種叫做集合的數據結構,Map是一種叫做字典的數據結構

那什么是集合?什么又是字典呢?

  •  集合

集合,是由一堆無序的、相關聯的,且不重復的內存結構【數學中稱為元素】組成的組合

  •  字典

字典(dictionary)是一些元素的集合。每個元素有一個稱作key 的域,不同元素的key 各不相同

它們之間又有什么區別呢?

  •  共同點:集合、字典都可以存儲不重復的值
  •  不同點:集合是以[值,值]的形式存儲元素,字典是以[鍵,值]的形式存儲

背景

大多數主流編程語言都有多種內置的數據集合。例如Python擁有列表(list)、元組(tuple)和字典(dictionary),Java有列表(list)、集合(set)、隊列(queue)

然而  JavaScript 直到ES6的發布之前,只擁有數組(array)和對象(object)這兩個內建的數據集合

在 ES6 之前,我們通常使用內置的 Object 模擬Map

但是這樣模擬出來的map會有一些缺陷,如下:

  1.  Object的屬性鍵是String或Symbol,這限制了它們作為不同數據類型的鍵/值對集合的能力
  2.  Object不是設計來作為一種數據集合,因此沒有直接有效的方法來確定對象具有多少屬性

Set

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

Set本身是一個構造函數,用來生成 Set 數據結構

基本使用

  •  語法

new Set([iterable]) 接收一個數組(或者具有 iterable 接口的其他數據結構), 返回一個新的Set對象 

  1. const set = new Set([1,2,1,2])  
  2. console.log(set) // {1,2}  

上面代碼可以看出 Set 是可以去除數組中的重復元素

屬性及方法

屬性

  •  size: 返回集合中所包含的元素的數量 
  1. console.log(new Set([1,2,1,2]).size) // 2 

操作方法

  •  add(value): 向集合中添加一個新的項
  •  delete(value): 從集合中刪除一個值
  •  has(value): 如果值在集合中存在,返回ture, 否則返回false
  •  clear(): 移除集合中的所有項 
  1. let set = new Set()  
  2. set.add(1)  
  3. set.add(2)  
  4. set.add(2)  
  5. set.add(3)  
  6. console.log(set) // {1,2,3}  
  7. set.has(2) // true  
  8. set.delete(2)    
  9. set.has(2) // false  
  10. set.clear()  

遍歷方法

  •  keys(): 返回鍵名的遍歷器
  •  values(): 返回鍵值的遍歷器
  •  entries(): 返回鍵值對的遍歷器
  •  forEach(): 使用回調函數遍歷每個成員 
  1. let set = new Set([1,2,3,4])  
  2. // 由于set只有鍵值,沒有鍵名,所以keys() values()行為完全一致  
  3. console.log(Array.from(set.keys())) // [1,2,3,4]  
  4. console.log(Array.from(set.values())) // [1,2,3,4]  
  5. console.log(Array.from(set.entries())) //  [[1,1],[2,2],[3,3],[4,4]]  
  6. set.forEach((item) => { console.log(item)}) // 1,2,3,4 

應用場景

因為 Set 結構的值是唯一的,我們可以很輕松的實現以下 

  1. // 數組去重  
  2. let arr = [1, 1, 2, 3];  
  3. let unique = [... new Set(arr)];  
  4. let a = new Set([1, 2, 3]);  
  5. let b = new Set([4, 3, 2]);    
  6. // 并集  
  7. let union = [...new Set([...a, ...b])]; // [1,2,3,4]  
  8. // 交集  
  9. let intersect = [...new Set([...a].filter(x => b.has(x)))]; [2,3]    
  10. // 差集  
  11. let difference = Array.from(new Set([...a].filter(x => !b.has(x)))); [1] 

WeakSet

WeakSet 對象是一些對象值的集合, 并且其中的每個對象值都只能出現一次。在WeakSet的集合中是唯一的

WeakSet 的出現主要解決弱引用對象存儲的場景, 其結構與Set類似

與Set的區別

  •  與Set相比,WeakSet 只能是對象的集合,而不能是任何類型的任意值
  •  WeakSet集合中對象的引用為弱引用。如果沒有其他的對WeakSet中對象的引用,那么這些對象會被當成垃圾回收掉。這也意味著WeakSet中沒有存儲當前對象的列表。正因為這樣,WeakSet 是不可枚舉的

WeakSet 的屬性跟操作方法與 Set 一致,不同的是 WeakSet 沒有遍歷方法,因為其成員都是弱引用,弱引用隨時都會消失,遍歷機制無法保證成員的存在

上面一直有提到弱引用,那弱引用到底是指什么呢?

弱引用是指不能確保其引用的對象不會被垃圾回收器回收的引用,換句話說就是可能在任意時間被回收

Map

Map 對象保存鍵值對,并且能夠記住鍵的原始插入順序。任何值(對象或者原始值) 都可以作為一個鍵或一個值。一個Map對象在迭代時會根據對象中元素的插入順序來進行 — 一個  for...of 循環在每次迭代后會返回一個形式為[key,value]的數組

基本使用

  •  語法

new Map([iterable]) Iterable 可以是一個數組或者其他 iterable 對象,其元素為鍵值對(兩個元素的數組,例如: [[ 1, 'one' ],[ 2, 'two' ]])。每個鍵值對都會添加到新的 Map 

  1. let map = new Map()  
  2. map.set('name', 'vuejs.cn');  
  3. console.log(map.get('name')) 

屬性及方法

基本跟 Set 類似,同樣具有如下方法屬性

  •  size: 返回 Map 結構的元素總數 
  1. let map = new Map()  
  2. map.set('name', 'vuejs.cn'); 
  3. console.log(map.size) // 1  
  4. console.log(new Map([['name','vue3js.cn'], ['age','18']]).size) // 2 

操作方法

  •  set(key, value): 向 Map 中加入或更新鍵值對
  •  get(key): 讀取 key 對用的值,如果沒有,返回 undefined
  •  has(key): 某個鍵是否在 Map 對象中,在返回 true 否則返回 false
  •  delete(key): 刪除某個鍵,返回 true, 如果刪除失敗返回 false
  •  clear(): 刪除所有元素 
  1. let map = new Map()  
  2. map.set('name','vue3js.cn')  
  3. map.set('age','18') 
  4. console.log(map) // Map {"name" => "vuejs.cn", "age" => "18"}  
  5. map.get('name') // vue3js.cn   
  6. map.has('name') // true  
  7. map.delete('name')    
  8. map.has(name) // false  
  9. map.clear() // Map {}  

遍歷方法

  •  keys():返回鍵名的遍歷器
  •  values():返回鍵值的遍歷器
  •  entries():返回所有成員的遍歷器
  •  forEach():遍歷 Map 的所有成員 
  1. let map = new Map()  
  2. map.set('name','vue3js.cn')  
  3. map.set('age','18')   
  4. console.log([...map.keys()])  // ["name", "age"]  
  5. console.log([...map.values()])  // ["vue3js.cn", "18"]  
  6. console.log([...map.entries()]) // [['name','vue3js.cn'], ['age','18']]  
  7. // name vuejs.cn  
  8. // age 18  
  9. map.forEach((value, key) => { console.log(key, value)})  

應用場景

Map 會保留所有元素的順序, 是在基于可迭代的基礎上構建的,如果考慮到元素迭代或順序保留或鍵值類型豐富的情況下都可以使用,下面摘抄自 vue3 源碼中依賴收集的核心實現 

  1. let depsMap = targetMap.get(target)  
  2.  if (!depsMap) {  
  3.    targetMap.set(target, (depsMap = new Map()))  
  4.  }  
  5.  let dep = depsMap.get(key)  
  6.  if (!dep) {  
  7.    depsMap.set(key, (dep = new Set()))  
  8.  }  
  9.  if (!dep.has(activeEffect)) {  
  10.    dep.add(activeEffect)  
  11.    activeEffect.deps.push(dep)  
  12.    ...  
  13.  } 

WeakMap

WeakMap 對象是一組鍵/值對的集合,其中的鍵是弱引用的。其鍵必須是對象,而值可以是任意的

與Map的區別

  •  Map 的鍵可以是任意類型,WeakMap 的鍵只能是對象類型
  •  WeakMap 鍵名所指向的對象,不計入垃圾回收機制

WeakMap 的屬性跟操作方法與 Map 一致,同 WeakSet 一樣,因為是弱引用,所以 WeakSet 也沒有遍歷方法

類型的轉換

  •  Map 轉為 Array 
  1. // 解構  
  2. const map = new Map([[1, 1], [2, 2], [3, 3]])  
  3. console.log([...map]) // [[1, 1], [2, 2], [3, 3]]  
  4. // Array.from()  
  5. const map = new Map([[1, 1], [2, 2], [3, 3]])  
  6. console.log(Array.from(map)) // [[1, 1], [2, 2], [3, 3]] 
  •  Array 轉為 Map 
  1. const map = new Map([[1, 1], [2, 2], [3, 3]])  
  2. console.log(map) // Map {1 => 1, 2 => 2, 3 => 3} 
  •     Map 轉為 Object 
  1. // 非字符串鍵名會被轉換為字符串  
  2. function mapToObj(map) {  
  3.     let obj = Object.create(null)  
  4.     for (let [key, value] of map) {  
  5.         obj[key] = value  
  6.     }  
  7.     return obj  
  8.  
  9. const map = new Map().set('name', 'vue3js.cn').set('age', '18')  
  10. mapToObj(map)  // {name: "vue3js.cn", age: "18"} 
  •  Object 轉為 Map 
  1. let obj = {"a":1, "b":2};  
  2. let map = new Map(Object.entries(obj)) 

總結

  •  Set、Map、WeakSet、WeakMap、都是一種集合的數據結構
  •  Set、WeakSet 是[值,值]的集合,且具有唯一性
  •  Map 和 WeakMap 是一種[鍵,值]的集合,Map 的鍵可以是任意類型,WeakMap 的鍵只能是對象類型
  •  Set 和 Map 有遍歷方法,WeakSet 和 WeakMap 屬于弱引用不可遍歷 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2023-05-10 08:21:42

Es6Set

2023-04-27 08:40:55

Redis數據結構存儲

2022-06-23 08:01:48

hookSetMap

2016-08-01 16:26:34

ES6集合

2022-01-26 07:18:57

ES6WeakSetMap

2020-11-16 08:10:04

ES6迭代器JavaScript

2023-07-03 17:24:33

數據結構

2019-10-29 08:59:16

Redis底層數據

2020-06-28 09:57:24

數據結構算法

2025-01-13 06:10:00

2025-05-13 08:05:00

Redis數據類型數據庫

2021-07-30 07:10:07

ES6函數參數

2011-05-07 15:38:30

MySQL數據引擎

2023-09-06 13:16:00

數據庫數據

2009-08-13 18:34:49

C#數據結構和算法

2021-12-13 11:54:13

SetEs6接口

2023-04-11 08:00:56

Redis類型編碼

2020-03-24 11:19:45

數據結構程序員存儲

2025-01-15 12:20:41

2024-03-26 00:05:13

數據庫數據結構
點贊
收藏

51CTO技術棧公眾號

91麻豆视频网站| 国产无精乱码一区二区三区| 成人在线免费观看黄色| 成人性生交大片免费看视频在线 | 91精品人妻一区二区三区| 久久sese| 亚洲欧美另类图片小说| 精品国产免费久久久久久尖叫| 波多野结衣大片| 韩日视频一区| 少妇精69xxtheporn| 欧美大喷水吹潮合集在线观看| 波多视频一区| 伊人夜夜躁av伊人久久| 欧美日韩视频在线一区二区观看视频| 中文字幕 日韩有码| 欧美91视频| 一区二区三区天堂av| 全亚洲最色的网站在线观看| 任你操精品视频| 亚洲va久久久噜噜噜久久| 欧美精品在线一区二区三区| 日本一区视频在线播放| 亚洲精品97久久中文字幕无码| 丝袜美腿亚洲色图| 久久久在线视频| 欧美肥妇bbwbbw| 国产欧美日韩在线观看视频| 精品福利av导航| 一级淫片在线观看| 99久久精品一区二区成人| 婷婷激情综合网| 成年人视频大全| 在线免费av网站| 91麻豆精品秘密| 国产在线欧美日韩| 隣の若妻さん波多野结衣| 日av在线不卡| 国产一区二区三区丝袜| 国产高潮失禁喷水爽到抽搐| 动漫一区二区三区| 欧美日韩精品一区二区天天拍小说 | 欧美在线精品免播放器视频| 国产一级av毛片| 欧美在线精品一区| 久久国产精品网站| 国产视频不卡在线| 一道在线中文一区二区三区| 欧美精品一区二区不卡| 日韩大尺度视频| 日韩精品成人| 精品国内片67194| 成人啪啪18免费游戏链接| 欧洲大片精品免费永久看nba| 欧美日韩不卡一区| 免费男同深夜夜行网站| 久久久久久久影视| 日本午夜精品一区二区三区电影| 欧美一级视频免费在线观看| 日产精品久久久久久久| 国产精品成人一区二区网站软件| 欧美日韩国产va另类| 欧美三级 欧美一级| 国产精品www994| 久久久亚洲天堂| 性无码专区无码| 久久九九精品| 国产精品黄色影片导航在线观看| 久久久午夜影院| 日韩一区亚洲二区| 亚洲性av在线| 欧美88888| 午夜欧美理论片| 97免费在线视频| 久久久久99精品成人片我成大片| 亚洲永久在线| 国产精品网站视频| 99久久精品国产一区二区成人| 国产一区欧美日韩| 99国精产品一二二线| 国产www免费观看| 91在线云播放| 亚洲乱码一区二区三区| 在线看三级电影| 99国产精品久久久久久久久久| 免费国产在线精品一区二区三区| 国产精品久久一区二区三区不卡| 中文字幕欧美日本乱码一线二线| 99超碰麻豆| 日韩毛片在线一区二区毛片| av不卡免费在线观看| 日韩欧美一区二区三区四区五区 | av一区二区三区黑人| 你懂的网址一区二区三区| 欧美精品电影| 国产成人av福利| 欧美激情视频一区二区三区| 美女免费久久| 亚洲精品综合在线| www.爱色av.com| 亚洲国产天堂| 精品亚洲国产成av人片传媒| 三上悠亚作品在线观看| 国产亚洲在线观看| 大胆人体色综合| 国产精品美女久久久久av爽| 久久99精品视频| 久久久久日韩精品久久久男男| 日韩欧美性视频| 蜜臀久久99精品久久久画质超高清| 91精品国产综合久久久久久丝袜| 黄色在线网站| 亚洲成人午夜电影| 亚洲欧美日本一区二区三区| 素人啪啪色综合| 欧美成人video| 国产亚洲无码精品| 永久亚洲成a人片777777| 日韩av免费看网站| 一区二区久久精品66国产精品| 一区视频在线| 国产一区深夜福利| 欧美视频综合| 亚洲成a人在线观看| 久久综合伊人77777麻豆最新章节| 超碰地址久久| 久久综合电影一区| 国产一区二区三区三州| 国产三级三级三级精品8ⅰ区| 欧美一级欧美一级| 精品一区二区三区中文字幕视频 | 欧美日韩中字一区| 久久无码人妻精品一区二区三区 | 精品国产一区二区三区久久| 国产成人无码一区二区三区在线| 免费看精品久久片| 久久精品国产第一区二区三区最新章节 | 国产精品一二区| 日本一区视频| 亚洲成av人片在线观看| 97中文字幕在线观看| 亚洲自拍偷拍网| 91精品在线看| 日本a级在线| 777xxx欧美| 公肉吊粗大爽色翁浪妇视频| 一区福利视频| 精品国产一区二区三区麻豆免费观看完整版| 羞羞的视频在线看| 欧美一卡二卡三卡| 久草视频免费在线播放| 全球av集中精品导航福利| 高清一区二区三区日本久| 黄色www视频| 亚洲啪啪综合av一区二区三区| 亚洲18在线看污www麻豆| 成人在线免费观看视频| 国产精品男人的天堂| 日韩毛片久久久| 一二三四社区欧美黄| 黑人性生活视频| 鲁大师精品99久久久| 亚洲一区二区黄| 国产精品欧美综合| 国产一区二区三区香蕉| 日韩精品福利片午夜免费观看| 五月天色综合| 九九精品在线视频| 天天干,天天操,天天射| 欧美日韩亚洲视频| 99久久99久久精品免费| 精东粉嫩av免费一区二区三区| 精品国产无码在线| 国产精东传媒成人av电影| 欧美一级视频在线观看| 日本网站在线免费观看视频| 日韩一级片网址| 国产51自产区| 欧美不卡在线| 国产视频不卡| 惠美惠精品网| 超碰97人人做人人爱少妇| 五月婷中文字幕| 欧美在线观看一二区| 国产精品 欧美激情| 99这里只有精品| 亚洲 国产 图片| 亚洲激情视频| 欧美日产一区二区三区在线观看| 韩国精品视频在线观看| 久久久亚洲国产天美传媒修理工| 蜜桃免费在线| 日韩欧美成人一区| 天天干天天干天天| 国产色爱av资源综合区| 中文字幕 欧美 日韩| 久色成人在线| 伊人情人网综合| 99国产精品免费网站| 国产成人一区二区在线| 精品精品导航| 日韩一区二区三区三四区视频在线观看 | 国产精品久久久久免费a∨| av网站在线免费看推荐| 亚洲视频欧美视频| 激情综合五月网| 久久久九九九九| 国产成人av片| 久久99热国产| 日韩精品在线观看av| 欧美mv日韩| 欧美一区二区在线视频观看| 日本精品600av| 一本色道久久综合狠狠躁篇的优点| av中文字幕免费在线观看| 欧洲人成人精品| 亚洲综合一二三| 亚洲日本在线天堂| 一级黄色免费毛片| 蜜桃视频第一区免费观看| 欧美爱爱视频免费看| 欧美在线国产| 宅男一区二区三区| 欧美亚洲国产一区| 成人免费看片网站| 成人在线观看免费播放| 7777kkkk成人观看| 俺来俺也去www色在线观看| 日韩资源在线观看| 99reav在线| 亚洲视频综合网| 天堂a中文在线| 色综合久久天天综合网| 久久久久成人精品无码| 欧美激情一区三区| 99九九99九九九99九他书对| 日本v片在线高清不卡在线观看| 国产福利视频在线播放| 国产一级一区二区| 妺妺窝人体色www在线小说| 在线成人国产| 国产在线xxxx| 精久久久久久| 国产午夜福利在线播放| a91a精品视频在线观看| 成年人看的毛片| 国产一区二区三区四区三区四| 日韩video| 国产精品草草| 国产婷婷一区二区三区| 狠久久av成人天堂| 亚洲在线视频一区二区| 亚洲经典一区| 日韩精品手机在线观看| 亚洲一级二级| 国产精品一线二线三线| 亚洲制服少妇| 日韩一级免费在线观看| 99在线精品视频在线观看| 欧美视频第一区| 日韩 欧美一区二区三区| 国产区二区三区| 欧美在线电影| 中文字幕欧美人与畜| 午夜精彩国产免费不卡不顿大片| 中文字幕の友人北条麻妃| 综合久久99| 欧美日韩二三区| aⅴ色国产欧美| 超碰超碰在线观看| 国产精品综合在线视频| 4438x全国最大成人| 91在线精品秘密一区二区| 亚洲精品午夜视频| 亚洲少妇中出一区| 久久视频免费在线观看| 91久久免费观看| 99免费在线视频| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 毛片无码国产| 成人黄色免费网站在线观看| 亚洲视频一起| 欧美久久综合性欧美| 99精品在线观看| 久久免费视频1| 日韩1区在线| 精品人妻大屁股白浆无码| 三级精品在线观看| 国产精品99久久久精品无码| 久久久精品日韩欧美| 亚洲一级生活片| 精品久久中文字幕| 91极品身材尤物theporn| 亚洲精品在线免费观看视频| 成年人在线观看| 亚洲欧美资源在线| а√天堂8资源在线官网| 国产亚洲精品91在线| h片在线免费| 青青草原成人在线视频| 日本免费一区二区三区视频| 欧美日韩国产精品一区二区| 欧美wwwww| 久久久久久久久久久视频| 黄页视频在线91| 毛茸茸多毛bbb毛多视频| 亚洲丝袜精品丝袜在线| 日本黄色一级视频| 8x8x8国产精品| 免费在线稳定资源站| 欧美激情乱人伦| 成人黄色在线| 欧美少妇一区| 伊人久久成人| 亚洲男人天堂av在线| 久久丝袜美腿综合| 日韩精品一区二区不卡| 69p69国产精品| 免费在线视频你懂得| 高清亚洲成在人网站天堂| 在线免费成人| 久久精品第九区免费观看 | 亚洲国产精品成人综合| 精品无码m3u8在线观看| 日韩欧美国产一二三区| 日韩精品毛片| 国产美女精彩久久| 国产99精品| 欧洲精品国产| 国产精品一国产精品k频道56| www.四虎精品| 亚洲天堂av老司机| 国产又粗又黄又爽视频| 在线观看不卡av| 日本精品网站| 先锋影音日韩| 免费在线视频一区| 久久久久无码精品国产sm果冻| 欧美性猛交xxx| 国产裸体美女永久免费无遮挡| 亚洲第一网站男人都懂| 欧美xxx黑人xxx水蜜桃| y111111国产精品久久婷婷| 午夜日本精品| 天天躁日日躁狠狠躁免费麻豆| 91视频精品在这里| 久久久久久久极品| 国产视频精品xxxx| xx欧美视频| 日本在线视频不卡| 美女脱光内衣内裤视频久久影院| 人人妻人人澡人人爽| 欧洲激情一区二区| 好男人免费精品视频| 欧美剧在线观看| 风间由美性色一区二区三区四区| 日本丰满少妇xxxx| 国产99一区视频免费| 99免费在线观看| 日韩精品黄色网| 日本欧美韩国| 先锋影音欧美| 国产精品18久久久久久久久久久久 | 激情五月宗合网| 成人动漫中文字幕| 日本熟女毛茸茸| 色系列之999| 日韩精品一区二区三区中文字幕 | 免费久久99精品国产| 日本中文字幕免费在线观看| 精品久久久久久久久久久久包黑料| 爱看av在线| 日韩免费av一区二区三区| 韩国三级电影一区二区| 久久精品这里有| 日韩电影免费观看中文字幕| 午夜日韩成人影院| 视频一区视频二区视频三区高| 精品一区二区免费在线观看| 色欲AV无码精品一区二区久久 | 午夜剧场在线免费观看| 中文字幕一区二区三区色视频| 亚洲精品国产av| 欧美一级大片视频| 国产精品99久久精品| 精品国产一区在线| 欧美另类久久久品| 欧美色图天堂| 日本精品一区二区| 国产黄人亚洲片| 国产一区二区三区影院| 日韩专区中文字幕| 日本在线中文字幕一区| 久久久久久久高清| 欧美午夜影院在线视频| 97caopor国产在线视频| 区一区二区三区中文字幕| 久久国产三级精品| 欧美日韩综合一区二区三区| 中文字幕日韩有码|