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

ES6中新增Set、Map兩種數據結構理解

開發 前端
Set是Es6新增的數據結構,類似于數組,但是成員的值都是唯一的,沒有重復的值,我們一般稱為集合。

如果要用一句來描述,我們可以說Set是一種叫做集合的數據結構,Map是一種叫做字典的數據結構。

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

  • 集合
    是由一堆無序的、相關聯的,且不重復的內存結構【數學中稱為元素】組成的組合
  • 字典
    是一些元素的集合。每個元素有一個稱作key 的域,不同元素的key 各不相同。

區別?

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

一、Set

Set是es6新增的數據結構,類似于數組,但是成員的值都是唯一的,沒有重復的值,我們一般稱為集合。

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

const s = new Set();

增刪改查

Set的實例關于增刪改查的方法:

  • add()
  • delete()
  • has()
  • clear()

add()

添加某個值,返回 Set 結構本身。

當添加實例中已經存在的元素,set不會進行處理添加。

s.add(1).add(2).add(2); // 2只被添加了一次

delete()

刪除某個值,返回一個布爾值,表示刪除是否成功。

s.delete(1)

has()

返回一個布爾值,判斷該值是否為Set的成員。

s.has(2)

clear()

清除所有成員,沒有返回值。

s.clear()

遍歷

Set實例遍歷的方法有如下:

關于遍歷的方法,有如下:

  • keys():返回鍵名的遍歷器
  • values():返回鍵值的遍歷器
  • entries():返回鍵值對的遍歷器
  • forEach():使用回調函數遍歷每個成員

Set的遍歷順序就是插入順序。

keys方法、values方法、entries方法返回的都是遍歷器對象。

let set = new Set(['red', 'green', 'blue']);

for (let item of set.keys()) {
  console.log(item);
}
// red
// green
// blue

for (let item of set.values()) {
  console.log(item);
}
// red
// green
// blue

for (let item of set.entries()) {
  console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]

forEach()用于對每個成員執行某種操作,沒有返回值,鍵值、鍵名都相等,同樣的forEach方法有第二個參數,用于綁定處理函數的this。

let set = new Set([1, 4, 9]);
set.forEach((value, key) => console.log(key + ' : ' + value))
// 1 : 1
// 4 : 4
// 9 : 9

擴展運算符和 Set 結構相結合實現數組或字符串去重。

// 數組
let arr = [3, 5, 2, 2, 5, 5];
let unique = [...new Set(arr)]; // [3, 5, 2]

// 字符串
let str = "352255";
let unique = [...new Set(str)].join(""); // ""

實現并集、交集、和差集。

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

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

// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}

// (a 相對于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}

二、Map

Map類型是鍵值對的有序列表,而鍵和值都可以是任意類型。

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

const m = new Map()

增刪改查

Map 結構的實例針對增刪改查有以下屬性和操作方法:

  • size 屬性
  • set()
  • get()
  • has()
  • delete()
  • clear()

size

size屬性返回 Map 結構的成員總數。

const map = new Map();
map.set('foo', true);
map.set('bar', false);

map.size // 2

set()

設置鍵名key對應的鍵值為value,然后返回整個 Map 結構。

如果key已經有值,則鍵值會被更新,否則就新生成該鍵。

同時返回的是當前Map對象,可采用鏈式寫法。

const m = new Map();

m.set('edition', 6)        // 鍵是字符串
m.set(262, 'standard')     // 鍵是數值
m.set(undefined, 'nah')    // 鍵是 undefined
m.set(1, 'a').set(2, 'b').set(3, 'c') // 鏈式操作

get()

get方法讀取key對應的鍵值,如果找不到key,返回undefined。

const m = new Map();

const hello = function() {console.log('hello');};
m.set(hello, 'Hello ES6!') // 鍵是函數

m.get(hello)  // Hello ES6!

has()

has方法返回一個布爾值,表示某個鍵是否在當前 Map 對象之中。

const m = new Map();

m.set('edition', 6);
m.set(262, 'standard');
m.set(undefined, 'nah');

m.has('edition')     // true
m.has('years')       // false
m.has(262)           // true
m.has(undefined)     // true

delete()

delete方法刪除某個鍵,返回true。如果刪除失敗,返回false。

const m = new Map();
m.set(undefined, 'nah');
m.has(undefined)     // true

m.delete(undefined)
m.has(undefined)       // false

clear()

clear方法清除所有成員,沒有返回值。

let map = new Map();
map.set('foo', true);
map.set('bar', false);

map.size // 2
map.clear()
map.size // 0

遍歷

Map 結構原生提供三個遍歷器生成函數和一個遍歷方法:

  • keys():返回鍵名的遍歷器
  • values():返回鍵值的遍歷器
  • entries():返回所有成員的遍歷器
  • forEach():遍歷 Map 的所有成員

遍歷順序就是插入順序。

const map = new Map([
  ['F', 'no'],
  ['T',  'yes'],
]);

for (let key of map.keys()) {
  console.log(key);
}
// "F"
// "T"

for (let value of map.values()) {
  console.log(value);
}
// "no"
// "yes"

for (let item of map.entries()) {
  console.log(item[0], item[1]);
}
// "F" "no"
// "T" "yes"

// 或者
for (let [key, value] of map.entries()) {
  console.log(key, value);
}
// "F" "no"
// "T" "yes"

// 等同于使用map.entries()
for (let [key, value] of map) {
  console.log(key, value);
}
// "F" "no"
// "T" "yes"

map.forEach(function(value, key, map) {
  console.log("Key: %s, Value: %s", key, value);
});

三、WeakSet 和 WeakMap

WeakSet

創建WeakSet實例。

const ws = new WeakSet();

WeakSet 可以接受一個具有 Iterable 接口的對象作為參數。

const a = [[1, 2], [3, 4]];
const ws = new WeakSet(a);
// WeakSet {[1, 2], [3, 4]}

在API中WeakSet與Set有兩個區別:

  • 沒有遍歷操作的API
  • 沒有size屬性

WeackSet只能成員只能是引用類型,而不能是其他類型的值。

let ws=new WeakSet();

// 成員不是引用類型
let weakSet=new WeakSet([2,3]);
console.log(weakSet) // 報錯

// 成員為引用類型
let obj1={name:1}
let obj2={name:1}
let ws=new WeakSet([obj1,obj2]); 
console.log(ws) //WeakSet {{…}, {…}}

WeakSet 里面的引用只要在外部消失,它在 WeakSet 里面的引用就會自動消失。

WeakMap

WeakMap結構與Map結構類似,也是用于生成鍵值對的集合。

在API中WeakMap與Map有兩個區別:

  • 沒有遍歷操作的API
  • 沒有clear清空方法
// WeakMap 可以使用 set 方法添加成員
const wm1 = new WeakMap();
const key = {foo: 1};
wm1.set(key, 2);
wm1.get(key) // 2

// WeakMap 也可以接受一個數組,
// 作為構造函數的參數
const k1 = [1, 2, 3];
const k2 = [4, 5, 6];
const wm2 = new WeakMap([[k1, 'foo'], [k2, 'bar']]);
wm2.get(k2) // "bar"

WeakMap只接受對象作為鍵名(null除外),不接受其他類型的值作為鍵名。

const map = new WeakMap();
map.set(1, 2)
// TypeError: 1 is not an object!
map.set(Symbol(), 2)
// TypeError: Invalid value used as weak map key
map.set(null, 2)
// TypeError: Invalid value used as weak map key

WeakMap的鍵名所指向的對象,一旦不再需要,里面的鍵名對象和所對應的鍵值對會自動消失,不用手動刪除引用。

舉個場景例子:

在網頁的 DOM 元素上添加數據,就可以使用WeakMap結構,當該 DOM 元素被清除,其所對應的WeakMap記錄就會自動被移除。

const wm = new WeakMap();

const element = document.getElementById('example');

wm.set(element, 'some information');
wm.get(element) // "some information"

注意:WeakMap 弱引用的只是鍵名,而不是鍵值。鍵值依然是正常引用。

下面代碼中,鍵值obj會在WeakMap產生新的引用,當你修改obj不會影響到內部。

const wm = new WeakMap();
let key = {};
let obj = {foo: 1};

wm.set(key, obj);
obj = null;
wm.get(key)
// Object {foo: 1}
責任編輯:姜華 來源: 今日頭條
相關推薦

2020-10-22 10:55:55

數據結構ES6前端

2022-01-26 07:18:57

ES6WeakSetMap

2020-11-16 08:10:04

ES6迭代器JavaScript

2023-04-27 08:40:55

Redis數據結構存儲

2022-06-23 08:01:48

hookSetMap

2021-08-16 07:05:58

ES6Promise開發語言

2016-08-01 16:26:34

ES6集合

2021-12-13 11:54:13

SetEs6接口

2021-07-30 07:10:07

ES6函數參數

2021-08-18 07:05:57

ES6Asyncawait

2019-10-29 08:59:16

Redis底層數據

2021-07-16 07:26:48

ES6javascript開發語言

2021-01-06 08:03:00

JavaScript數據結構

2021-08-02 05:51:29

foreachES6數組

2011-05-07 15:38:30

MySQL數據引擎

2009-07-02 15:50:36

JSP體系結構

2009-07-09 14:57:56

Java Consol

2020-06-28 09:57:24

數據結構算法

2025-01-13 06:10:00

2025-05-13 08:05:00

Redis數據類型數據庫
點贊
收藏

51CTO技術棧公眾號

欧美日韩第一页| 色综合色狠狠天天综合色| 国产一区视频在线播放| 欧美另类69xxxx| 国产精品av一区二区三区| 久久久久久久综合色一本| 国产精品户外野外| 最新av电影网站| 69精品国产久热在线观看| 一区二区成人在线| 精品欧美国产一区二区三区不卡| 天堂在线免费观看视频| 成人午夜国产| 欧美一二三四区在线| 2018日日夜夜| 国产中文在线观看| 久久久人人人| 久久精品视频在线| 亚洲av成人精品一区二区三区 | 欧美手机在线观看| gogo人体一区| 色婷婷精品久久二区二区蜜臀av| 一区二区精品在线观看| 成人午夜免费在线观看| 日韩高清一级片| 欧美精品一区二区三区国产精品 | 91国内精品白嫩初高生| 欧美日韩日本国产| 日韩精品大片| 隣の若妻さん波多野结衣| 蜜乳av另类精品一区二区| 美女av一区二区三区| 国产福利短视频| 亚洲啊v在线免费视频| 亚洲图片一区二区| 免费精品视频一区| 国产色视频在线| 久久久夜夜夜| 久久久久在线观看| 欧美美女性生活视频| 欧美绝顶高潮抽搐喷水合集| 制服丝袜亚洲播放| 日韩精品无码一区二区三区免费| 免费在线播放电影| 中文字幕一区二区三区不卡| 久久99导航| 一区二区三区精| 亚洲一级高清| 久久福利视频导航| 夫妇交换中文字幕| 久久国产精品免费精品3p| 欧美绝品在线观看成人午夜影视| 欧美 日韩 国产一区| av中文字幕在线观看| 国产精品视频麻豆| 免费av一区二区三区| 精品人妻少妇嫩草av无码专区| 日本美女一区二区三区| 18久久久久久| 国产午夜福利一区二区| 欧美欧美天天天天操| 日韩中文字幕精品| 久久久久久久久久久久| 亚洲ab电影| 亚洲精品久久久久久久久久久 | 日韩欧美中文字幕一区二区| 欧美成人久久| 中文日韩电影网站| 你懂得视频在线观看| 欧美手机视频| 亚洲图中文字幕| 日本一区二区三区网站| 欧美电影完整版在线观看| 欧美变态tickling挠脚心| 天天av天天操| 91成人小视频| 欧美一级欧美三级在线观看| 亚洲色图欧美自拍| 一区二区日韩| 日韩电影中文字幕一区| 欧美老女人性生活视频| 99久久夜色精品国产亚洲狼| 欧美精品免费在线观看| 日韩伦人妻无码| 日韩专区在线视频| 91视频-88av| 欧美视频久久久| 国产亚洲欧美日韩俺去了| 在线电影看在线一区二区三区| 怡红院av在线| 色哟哟在线观看一区二区三区| 午夜免费看毛片| 成人爽a毛片免费啪啪红桃视频| 精品伊人久久97| 小泽玛利亚一区| 野花国产精品入口| 91精品久久久久久久久久另类 | 欧美日本三级| 日韩国产精品一区| www.黄色com| 99精品国产在热久久| 国产精品一区二区三区免费视频| 亚洲av无码乱码国产麻豆| 久久蜜桃一区二区| 久久精品国产精品亚洲精品色| 91桃色在线| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 韩国成人免费视频| 91福利社在线观看| 天堂www中文在线资源| 91日韩在线| 日本精品久久久久久久| 朝桐光av在线一区二区三区| 欧美激情在线看| 无码熟妇人妻av在线电影| av在线播放一区| 亚洲国产美女精品久久久久∴| 一级黄色片网址| 亚洲综合日本| 99视频在线播放| 日本暖暖在线视频| 色综合久久天天| 人妻互换一二三区激情视频| 婷婷精品进入| 国产精品久久久久久久久久免费| 国内爆初菊对白视频| 日韩理论片网站| 日韩精品你懂的| 亚洲制服一区| 26uuu日韩精品一区二区| 黄色成人一级片| 亚洲男帅同性gay1069| 五月婷婷之综合激情| 亚洲国产精品嫩草影院久久av| 欧美激情一二区| 国产人妖一区二区| 中文字幕在线观看不卡| 中文字幕在线观看第三页| 要久久爱电视剧全集完整观看| 久久久久久久成人| 亚洲精品国产手机| 亚洲一区中文日韩| 一级黄色大片免费看| 女人色偷偷aa久久天堂| 亚洲影院在线看| 精品51国产黑色丝袜高跟鞋| 欧美精品第1页| 国产大屁股喷水视频在线观看| 美国欧美日韩国产在线播放| 深田咏美在线x99av| 欧美黑人疯狂性受xxxxx野外| 日韩精品在线观| 亚洲天堂男人av| 国产亚洲va综合人人澡精品| 91av俱乐部| 欧美oldwomenvideos| 国产精品福利片| 中文字幕在线播放| 在线成人免费观看| 欧美久久久久久久久久久久| 成人高清视频在线| 欧美极品欧美精品欧美| 宅男在线一区| 国产精品视频永久免费播放| 1024国产在线| 日韩欧美一级在线播放| 久久久一区二区三区四区| 成人国产精品免费网站| 黑人糟蹋人妻hd中文字幕| 国产中文精品久高清在线不| 国产精品欧美激情| 影院在线观看全集免费观看| 亚洲国产成人精品久久久国产成人一区| 日本三级网站在线观看| 久久久99免费| 亚洲一二三av| 影音先锋久久久| 欧美一区免费视频| 91麻豆精品一二三区在线| 久久久久久久一区二区三区| 台湾av在线二三区观看| 欧美视频中文一区二区三区在线观看| 成人高潮免费视频| 99热在这里有精品免费| 五月天av在线播放| 国产一区观看| 亚洲电影一二三区| www.成人网| 国产精品大陆在线观看| 爆操欧美美女| 亚洲人成在线电影| 国产美女自慰在线观看| 精品毛片三在线观看| 人与动物性xxxx| 99精品久久99久久久久| 特黄视频免费观看| 99riav国产精品| 国产高清免费在线| 亚洲黄页网站| 99国产视频在线| 国产极品久久久久久久久波多结野| 久久国产精品久久国产精品| 日本不卡免费播放| 91精品国产综合久久香蕉的特点| 国产一级做a爱片久久毛片a| 1000精品久久久久久久久| 大乳护士喂奶hd| 国产精品资源网站| 国产成人精品视频ⅴa片软件竹菊| 欧美国产专区| 一区二区三区观看| 蜜臀91精品国产高清在线观看| 亚洲一区二区三区四区在线播放| 国产日韩另类视频一区| 久久免费视频这里只有精品| 久久99精品久久久久久野外| 亚洲色图国产精品| 五月婷婷六月激情| 欧美大胆人体bbbb| 99精品免费观看| 欧美日韩一区二区三区免费看| 九九热在线视频播放| 一区二区三区四区视频精品免费 | 欧洲日本在线| 亚洲人成亚洲人成在线观看| 网站黄在线观看| 精品免费一区二区三区| 国产av一区二区三区| 精品视频在线免费| 国模私拍一区二区| 在线观看av一区| 在线观看污污网站| 欧美性猛交丰臀xxxxx网站| 日韩av综合在线| 亚洲一区二三区| 九九九免费视频| 亚洲精品视频自拍| 欧美丰满熟妇bbbbbb| 亚洲日穴在线视频| www.av免费| 亚洲视频一区二区在线| 日本一级特级毛片视频| 国产精品久久久久毛片软件| 男女做爰猛烈刺激| 国产欧美一区二区精品婷婷 | 亚洲另类中文字| 午夜爱爱毛片xxxx视频免费看| 亚洲欧美偷拍卡通变态| 国产盗摄一区二区三区在线| 亚洲欧美日韩国产手机在线| 可以直接看的黄色网址| 一区二区在线免费观看| 日韩视频中文字幕在线观看| 一个色在线综合| 国产网址在线观看| 欧美日韩在线视频一区| 黄色片视频免费| 欧美色涩在线第一页| 国产精品系列视频| 日韩视频在线一区二区| 亚洲精品国产av| 国产手机视频精品| av网页在线| 久久夜色精品国产亚洲aⅴ| 日韩免费影院| 91精品国产91| 亚洲伦理影院| 91在线色戒在线| 99re热精品视频| 麻豆一区区三区四区产品精品蜜桃| 色综合综合色| 国产成人精品免费看在线播放| 欧美福利影院| 人人妻人人添人人爽欧美一区| 午夜一区在线| 污污网站在线观看视频| 大陆成人av片| 夫妇交换中文字幕| 一级做a爱片久久| 天天爽夜夜爽人人爽| 欧美一区二区在线免费观看| 黑人精品一区二区| 国产亚洲精品成人av久久ww| 2024短剧网剧在线观看| 欧洲亚洲妇女av| 玖玖精品一区| 免费在线观看一区二区| 亚洲色图国产| 凹凸国产熟女精品视频| 精品一二三四在线| 私密视频在线观看| **性色生活片久久毛片| 在线观看亚洲天堂| 91麻豆精品国产91久久久久久| 天天干,夜夜爽| www国产亚洲精品久久网站| 黄色在线免费观看网站| 成人激情春色网| 伊人久久大香线蕉av不卡| 中国一级黄色录像| 久久久久中文| 免费看毛片的网站| 亚洲欧洲日产国码二区| 国产微拍精品一区| 日韩精品一区二区三区四区视频| 国产精品ⅴa有声小说| 久久99热这里只有精品国产| 成人免费av电影| 国产日韩欧美一区二区三区四区| 国产精品videosex性欧美| 久章草在线视频| 粉嫩一区二区三区性色av| 国产三级在线观看完整版| 精品国产成人av| www.精品久久| 色诱女教师一区二区三区| 免费电影日韩网站| 国产一区二区三区四区五区加勒比 | 精品国产91九色蝌蚪| 日韩成人影视| 国产精品日本精品| re久久精品视频| a√天堂在线观看| 99久久婷婷国产| 久久亚洲AV无码| 日韩欧美在线网站| 精品自拍一区| 国产日韩在线观看av| 欧美日韩中字| 北条麻妃在线一区| 91美女在线观看| 日本天堂网在线观看| 日韩女优制服丝袜电影| caoporn免费在线| 亚洲一区亚洲二区| 欧美精品观看| 亚洲精品乱码久久久久久9色| 亚洲视频每日更新| 一炮成瘾1v1高h| 精品国内产的精品视频在线观看| 最新日韩一区| 视频一区视频二区视频| 蜜桃av噜噜一区| 看黄色录像一级片| 91精品国产综合久久国产大片| 免费av在线播放| 亚洲精品免费一区二区三区| 欧美永久精品| 少妇欧美激情一区二区三区| 一区二区三区在线观看视频| 国产91绿帽单男绿奴| 68精品国产免费久久久久久婷婷| 全国精品免费看| 一本久道综合色婷婷五月| 中文字幕欧美区| 国产又黄又爽视频| 欧美高跟鞋交xxxxxhd| 国内自拍欧美| 国产亚洲天堂网| 国产欧美一区二区精品秋霞影院| 黄色一区二区视频| 超碰97人人做人人爱少妇| silk一区二区三区精品视频 | 九九视频精品免费| av激情在线观看| 亚洲精品99久久久久中文字幕| 欧美成人黑人| 99久久久无码国产精品性色戒| 国产成人日日夜夜| av中文在线播放| 中文字幕久热精品在线视频| 国产999精品在线观看| 精品无码国产一区二区三区av| www激情久久| 亚洲一级在线播放| 欧美国产高跟鞋裸体秀xxxhd| 婷婷成人影院| 午夜精品免费看| 亚洲国产精品一区二区尤物区| 你懂的视频在线播放| 91九色国产社区在线观看| 最新日韩av| 天堂在线中文视频| 精品国产第一区二区三区观看体验| 中文字幕这里只有精品| 亚洲综合激情五月| 91麻豆免费观看| 国产精品永久久久久久久久久| 久久久久久久久久亚洲| av一区二区在线观看| 免费观看污网站| 欧美日韩国产精选| 国产伦理精品| 久久久成人精品一区二区三区| 99re视频精品| 一区二区美女视频| 日韩av电影在线网| 欧美日韩伊人| 山东少妇露脸刺激对白在线| 亚洲国产高清高潮精品美女|