精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲成人av| 日韩中文在线| 亚洲日本va在线观看| www.久久草| 波多野结衣 久久| 婷婷综合视频| 精品亚洲一区二区三区在线观看| 中文字幕中文字幕在线中一区高清| 五月婷婷六月婷婷| 国产成人精品a视频| 亚洲欧美日韩天堂一区二区| 国产精品一色哟哟| 欧美777四色影视在线| 久久精品国产一区二区| 国内精品久久久久久| jizz18女人高潮| 国产香蕉精品| 777亚洲妇女| 四虎永久在线精品无码视频| 亚洲小说区图片区都市| 国产亚洲欧洲一区高清在线观看| 国产999精品| 亚洲成人黄色av| 99这里只有精品视频| 亚洲午夜三级在线| 一区二区欧美日韩| 四虎影院在线域名免费观看| 国产精品一区二区在线看| 欧美激情精品久久久| 88av在线播放| 日韩精品一区二区三区中文字幕 | 国产精品99导航| 免费在线视频一区二区| 欧美电影《轻佻寡妇》| 亚洲欧美在线免费| 一级国产黄色片| 深夜激情久久| 日韩三级av在线播放| 天天干天天爽天天射| 亚洲www免费| 欧美日韩激情视频| 欧美一区二区中文字幕| tube8在线hd| 亚洲在线免费播放| 国产 欧美 日韩 一区| 成人免费黄色网页| 国产午夜精品美女毛片视频| 免费一区二区三区| 国产视频在线一区| 激情五月婷婷综合网| 国产精品吹潮在线观看| 九九视频免费看| 中文字幕一区二区av | 一区二区三区资源| 精品一区二区三区国产| 免费av一级片| 9久草视频在线视频精品| 国产精品久久久久久久久免费看| 欧美成人一二三区| 真实国产乱子伦精品一区二区三区| 亚洲精品久久7777777| www.男人天堂| 亚欧洲精品视频在线观看| 精品中文视频在线| 国产高潮呻吟久久| 日韩一区二区在线免费| www.亚洲免费视频| 欧洲猛交xxxx乱大交3| 中文字幕一区二区三区欧美日韩 | 国产精品毛片一区二区三区| 91国产美女视频| 国产成人无码av| 男男成人高潮片免费网站| 国产原创欧美精品| 亚洲AV无码一区二区三区少妇| 蜜芽一区二区三区| 成人精品一区二区三区电影黑人| 国产又大又黄又粗| 日本亚洲最大的色成网站www| 国内成人精品视频| 天天干天天干天天操| 久久99蜜桃精品| 国产精品91一区| 一级爱爱免费视频| 国产成人一区在线| 日本a级片久久久| 黄网站视频在线观看| 国产精品乱码妇女bbbb| 亚洲啊啊啊啊啊| 蜜桃视频www网站在线观看| 亚洲精品国产一区二区三区四区在线| 一本色道久久综合亚洲二区三区 | 中文字幕在线播出| 国产精品系列在线观看| 91久久久久久久久| 老牛影视av牛牛影视av| 欧美国产欧美亚州国产日韩mv天天看完整| 裸模一区二区三区免费| av在线电影网| 亚洲一区二区不卡免费| 久久9精品区-无套内射无码| 高清久久一区| 亚洲天堂网在线观看| 青青草免费av| 好吊视频一区二区三区四区| 国产激情视频一区| 伊人网免费视频| av成人动漫在线观看| 亚洲一区二区精品在线| jizzjizz中国精品麻豆| 欧美日韩另类一区| 欧美图片一区二区| 久久久久久久久久久久久久| 秋霞成人午夜鲁丝一区二区三区| 中文字幕一区在线播放| 国产成人自拍在线| 亚洲三区四区| 欧美香蕉视频| 亚洲大胆人体视频| 免费三级在线观看| 美腿丝袜亚洲一区| 欧美极品视频一区二区三区| 丁香花电影在线观看完整版| 91精品国产欧美一区二区18 | 黄瓜视频免费观看在线观看www | 久久久久久69| 91国在线视频| 国产日本欧美一区二区| 国产免费黄色小视频| 成人日韩在线| 精品亚洲va在线va天堂资源站| 欧美a在线播放| 三级不卡在线观看| 欧美日韩中文国产一区发布| h片在线观看视频免费| 日韩一本二本av| 亚洲国产123| 久久精品国产99| 亚洲精品美女久久7777777| 女生影院久久| 亚洲乱码av中文一区二区| av资源在线免费观看| 日韩av一二三| 翔田千里亚洲一二三区| 国产一区二区三区朝在线观看| 欧美一级在线免费| 欧美日韩黄色网| 国产主播一区二区三区| 做爰高潮hd色即是空| ****av在线网毛片| 亚洲第一色中文字幕| 国产午夜免费视频| 99免费精品在线观看| 欧美成人免费在线观看视频| 久久99国产精品久久99大师| 97精品视频在线观看| 亚洲欧美一区二区三| 欧美性猛交xxxx富婆弯腰| jizz日本免费| 中文字幕av亚洲精品一部二部| 国产成人鲁鲁免费视频a| 国产免费av高清在线| 亚洲免费在线视频| japan高清日本乱xxxxx| 在线播放日韩| 欧美xxxx黑人又粗又长密月| 欧美性suv| 久久韩剧网电视剧| www毛片com| 丁香五精品蜜臀久久久久99网站| 亚洲在线色站| 欧美7777| 日韩中文字幕网站| 懂色av蜜臀av粉嫩av分享吧| 亚洲色图欧美在线| 俄罗斯黄色录像| 国产精品免费看| 日产精品久久久一区二区| 黄色成人小视频| 九九热视频这里只有精品| 五月婷婷丁香花| 欧美日韩在线播放| 毛片aaaaa| 国产肉丝袜一区二区| www.色就是色.com| 国产一区二区精品久| 成人免费视频网址| 色是在线视频| 久久九九精品99国产精品| 综合久久中文字幕| 国产欧美一区二区精品秋霞影院| 国产黄色一级网站| 四季av一区二区凹凸精品| 91成人理论电影| 国产私拍福利精品视频二区| 欧美日韩成人网| 国产视频第一区| 日韩欧美黄色影院| 秋霞av一区二区三区| 曰韩精品一区二区| 无码少妇一区二区| 成人av免费在线观看| 中文字幕免费高清在线| 亚洲免费影视| 真人做人试看60分钟免费| 欧美人与物videos另类xxxxx| 57pao精品| 在线观看免费视频你懂的| 亚洲欧洲日产国产网站| 亚洲精品国产片| 欧美揉bbbbb揉bbbbb| 色婷婷av国产精品| 亚洲免费在线视频一区 二区| 免费av不卡在线| 亚洲欧美久久| 岛国大片在线播放| 欧美一区二区三区久久精品茉莉花| 国产精品丝袜一区二区三区| 欧美激情20| 久久久久亚洲精品| 99热国产在线中文| 日韩在线播放av| 中文字幕在线观看日本| 亚洲乱码国产乱码精品精天堂 | aa视频在线观看| 久久精品国产2020观看福利| 国产高清视频在线| 亚洲免费电影在线观看| 污视频在线免费观看| 欧美性受xxxx| 一级做a爰片久久毛片| 婷婷一区二区三区| 国产又粗又猛又爽又黄的视频四季| 国产一区二区伦理片| 美女网站色免费| 久久视频一区| 白嫩少妇丰满一区二区| 国产精品普通话对白| 色撸撸在线观看| 日韩欧美一区二区三区在线视频 | 欧洲成人午夜免费大片| 激情视频网站在线播放色| 国内精品久久久久伊人av| 91在线品视觉盛宴免费| 亚洲午夜久久久久久久| 蜜桃视频在线观看视频| 日韩精品在线免费观看| 国产免费av观看| 日韩一区二区三区av| 国内精品偷拍视频| 日韩精品一区二区在线| 亚洲经典一区二区三区| 精品福利视频一区二区三区| 日本精品久久久久| 日韩精品在线免费| 成人18在线| 色婷婷综合久久久久| 日本韩国一区| 一区二区三区亚洲| 日韩a在线观看| 欧美xxxxxxxxx| 免费观看a视频| 国产午夜精品理论片a级探花| 亚洲成人一级片| 亚洲高清不卡av| 免费在线性爱视频| 亚洲国产97在线精品一区| 天天干天天做天天操| 亚洲欧美日韩第一区| 日本高清在线观看wwwww色| 久热精品视频在线| 亚洲精品承认| 欧美高清视频在线播放| 国产精品一二三产区| 国产成人一区二区| 亚洲天堂资源| 国产精品久久久久久久久久免费 | 国产伦精品一区二区| 国产精品麻豆| 久久国产精品精品国产色婷婷| 99精品国产高清一区二区麻豆| 成人两性免费视频| 国内精品偷拍| 亚洲一区不卡在线| 99成人在线| www.久久91| fc2成人免费人成在线观看播放| 两女双腿交缠激烈磨豆腐 | 成年网站免费在线观看| 国产福利一区二区三区视频| 人妻无码一区二区三区| 中文字幕一区二区三区不卡在线| 亚洲天堂精品一区| 亚洲午夜免费福利视频| 国语对白做受69按摩| 欧美一级爆毛片| 国产在线视频网| 欧美激情女人20p| 久久99久久99精品免观看软件| 国产成人亚洲综合91精品| 51亚洲精品| 国内精品久久国产| 久久精品亚洲人成影院| 日本免费一级视频| 国产久卡久卡久卡久卡视频精品| 人妻av一区二区三区| 亚洲国产精品v| 99热这里只有精品4| 欧美日韩性视频| 亚洲av综合色区无码一二三区 | 亚洲free性xxxx护士白浆| 欧美国产亚洲精品| 日韩欧美一区二区视频在线播放| 日韩精品一区二区三区免费观看| 日本黄色a视频| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲免费影院| 午夜剧场免费看| 亚洲欧洲综合另类在线| 91麻豆精品在线| 精品视频在线播放| av色在线观看| 波多野结衣精品久久| 国产videos久久| 国产又大又长又粗又黄| 黄色在线成人| 乳色吐息在线观看| 亚洲视频一二三区| 97成人在线观看| 日韩在线观看免费全集电视剧网站 | 欧美激情欧美狂野欧美精品 | 999久久久国产精品| www黄色av| 国产一区不卡在线| 亚洲一级生活片| 欧美精品日韩一区| 尤物在线视频| 国产精品久久久久91| 国产精品zjzjzj在线观看| www.avtt| 波多野结衣中文字幕一区 | 五月婷婷六月综合| 三级av免费观看| 国产精品久久久久天堂| 亚洲最大成人av| 久久好看免费视频| 日本在线成人| 视频三区二区一区| 日产欧产美韩系列久久99| www.四虎精品| 亚洲18女电影在线观看| 秋霞av鲁丝片一区二区| 97在线视频免费播放| 亚洲资源网你懂的| 日本在线观看免费视频| 国产精品久久久久婷婷| av免费在线不卡| 久久欧美在线电影| 免费成人高清在线视频theav| 日韩黄色片在线| 精彩视频一区二区| 九九热视频精品| 欧美一卡2卡三卡4卡5免费| 丁香花在线高清完整版视频| 成人福利免费观看| 欧美不卡视频| 国产精品无码专区| 欧美三级电影一区| 美足av综合网| 欧美极品视频一区二区三区| 美女视频黄频大全不卡视频在线播放 | 日韩黄色碟片| a级片一区二区| 97精品视频在线观看自产线路二| 欧美交换国产一区内射| 欧美刺激午夜性久久久久久久| 国内精品久久久久久野外| 国产精品亚洲激情| 国内精品久久久久久久影视麻豆 | 国产欧美中文在线| 国产精品乱码一区二区| 久久久久久久久久久成人| 国产毛片一区二区三区| 九色91porny| 一本大道久久a久久综合| 成人福利片网站| 精品久久sese| 亚洲欧美高清| 日韩在线视频网址| 日韩第一页在线| 国产精品亚洲欧美日韩一区在线 | 久久99久久99精品蜜柚传媒| 奇米在线7777在线精品| 麻豆亚洲av成人无码久久精品| 精品久久五月天| 成人福利一区二区| 成人在线观看你懂的| 91美女在线观看| 国产熟女一区二区三区四区| 国产www精品|