摘要:和數(shù)據(jù)結(jié)構(gòu)以及遍歷器的概念無(wú)序不可重復(fù)的集合實(shí)例化實(shí)例可以調(diào)用的方法結(jié)構(gòu)的實(shí)例有以下屬性。返回一個(gè)布爾值,表示該值是否為的成員。返回結(jié)構(gòu)的成員總數(shù)。一種數(shù)據(jù)結(jié)構(gòu)只要部署了接口,我們就稱這種數(shù)據(jù)結(jié)構(gòu)是可遍歷的。
Set和Map數(shù)據(jù)結(jié)構(gòu)以及Iterator(遍歷器)的概念
Set
無(wú)序不可重復(fù)的集合
1.實(shí)例化
new Set(); new Set([]); new Set("terry");// t e r y
2.Set實(shí)例可以調(diào)用的方法
Set 結(jié)構(gòu)的實(shí)例有以下屬性。 Set.prototype.constructor:構(gòu)造函數(shù),默認(rèn)就是Set函數(shù)。 Set.prototype.size:返回Set實(shí)例的成員總數(shù)。 Set 結(jié)構(gòu)的實(shí)例有以下方法。 add(value):添加某個(gè)值,返回Set結(jié)構(gòu)本身 delete(value):刪除某個(gè)值,返回一個(gè)布爾值,表示刪除是否成功。 has(value):返回一個(gè)布爾值,表示該值是否為Set的成員。 clear():清除所有成員,沒(méi)有返回值。 keys():返回鍵名的遍歷器 values():返回鍵值的遍歷器 entries():返回鍵值對(duì)的遍歷器 forEach():使用回調(diào)函數(shù)遍歷每個(gè)成員 Set本身就是就是一個(gè)構(gòu)造函數(shù),用來(lái)生成Set數(shù)據(jù)結(jié)構(gòu) let set = new Set(); set.add(1); //添加數(shù)據(jù) set.add(2); set.add(3); set.add(2); console.log(set); //set{1,2,3}
應(yīng)用:去除數(shù)組中重復(fù)元素的方法
let arr = [1,2.3,4,3,2,1]; let set = new Set(arr); let result = [...set]; //set轉(zhuǎn)換為數(shù)組
Map
Map可以接受一個(gè)數(shù)組作為參數(shù),該數(shù)組的成員是一個(gè)個(gè)表示鍵值對(duì)的數(shù)組
let map = new Map(); map.set("name","terry"); const map = new Map([ ["name", "張三"], ["title", "Author"] ]);
Map 結(jié)構(gòu)的實(shí)例有以下屬性。
Set.prototype.size:返回 Map 結(jié)構(gòu)的成員總數(shù)。
Map 結(jié)構(gòu)的實(shí)例有以下方法。
set(key, value):set方法設(shè)置鍵名key對(duì)應(yīng)的鍵值為value,然后返回整個(gè) Map 結(jié)構(gòu)。如果key已經(jīng)有值,則鍵值會(huì)被更新,否則就新生成該鍵。 get(key):get方法讀取key對(duì)應(yīng)的鍵值,如果找不到key,返回undefined。 has(key):has方法返回一個(gè)布爾值,表示某個(gè)鍵是否在當(dāng)前 Map 對(duì)象之中。 delete(key):delete方法刪除某個(gè)鍵,返回true。如果刪除失敗,返回false。 clear():清除所有成員,沒(méi)有返回值 keys():返回鍵名的遍歷器 values():返回鍵值的遍歷器 entries():返回鍵值對(duì)的遍歷器 forEach():使用回調(diào)函數(shù)遍歷每個(gè)成員
Iterator
遍歷器(Iterator)就是這樣一種機(jī)制。它是一種接口,為各種不同的數(shù)據(jù)結(jié)構(gòu)提供統(tǒng)一的訪問(wèn)機(jī)制。任何數(shù)據(jù)結(jié)構(gòu)只要部署Iterator接口,就可以完成遍歷操作(即依次處理該數(shù)據(jù)結(jié)構(gòu)的所有成員)
Iterator 的作用有三個(gè):
為各種數(shù)據(jù)結(jié)構(gòu),提供一個(gè)統(tǒng)一的、簡(jiǎn)便的訪問(wèn)接口;
使得數(shù)據(jù)結(jié)構(gòu)的成員能夠按某種次序排列;
ES6創(chuàng)造了一種新的遍歷命令for...of循環(huán),Iterator接口主要供for...of消費(fèi)。
Iterator 的遍歷過(guò)程:
創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。
第一次調(diào)用指針對(duì)象的next方法,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一個(gè)成員。
第二次調(diào)用指針對(duì)象的next方法,指針就指向數(shù)據(jù)結(jié)構(gòu)的第二個(gè)成員。
不斷調(diào)用指針對(duì)象的next方法,直到它指向數(shù)據(jù)結(jié)構(gòu)的結(jié)束位置。
默認(rèn)Iterator接口
Iterator 接口的目的,就是為所有數(shù)據(jù)結(jié)構(gòu),提供了一種統(tǒng)一的訪問(wèn)機(jī)制,即for...of循環(huán)(詳見(jiàn)下文)。當(dāng)使用for...of循環(huán)遍歷某種數(shù)據(jù)結(jié)構(gòu)時(shí),該循環(huán)會(huì)自動(dòng)去尋找 Iterator 接口。一種數(shù)據(jù)結(jié)構(gòu)只要部署了 Iterator 接口,我們就稱這種數(shù)據(jù)結(jié)構(gòu)是“可遍歷的”(iterable)。
可以通過(guò)如下方法訪問(wèn)Iterator對(duì)象
var iterator = iterObj[Symbol.iterator]();
原生具備 Iterator 接口的數(shù)據(jù)結(jié)構(gòu)如下
Array Map Set String TypedArray 函數(shù)的 arguments 對(duì)象 NodeList 對(duì)象
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/28718.html
摘要:和數(shù)據(jù)結(jié)構(gòu)以及遍歷器的概念無(wú)序不可重復(fù)的集合實(shí)例化實(shí)例可以調(diào)用的方法結(jié)構(gòu)的實(shí)例有以下屬性。返回一個(gè)布爾值,表示該值是否為的成員。返回結(jié)構(gòu)的成員總數(shù)。一種數(shù)據(jù)結(jié)構(gòu)只要部署了接口,我們就稱這種數(shù)據(jù)結(jié)構(gòu)是可遍歷的。 Set和Map數(shù)據(jù)結(jié)構(gòu)以及Iterator(遍歷器)的概念 Set 無(wú)序不可重復(fù)的集合1.實(shí)例化 new Set(); new Set([]); new Set(terry);/...
摘要:基本原理解構(gòu)是提供的語(yǔ)法糖,其實(shí)內(nèi)在是針對(duì)可迭代對(duì)象的接口,通過(guò)遍歷器按順序獲取對(duì)應(yīng)的值進(jìn)行賦值。屬性值返回一個(gè)對(duì)象的無(wú)參函數(shù),被返回對(duì)象符合迭代器協(xié)議。迭代器協(xié)議定義了標(biāo)準(zhǔn)的方式來(lái)產(chǎn)生一個(gè)有限或無(wú)限序列值。 更多系列文章請(qǐng)看 1、基本語(yǔ)法 1.1、數(shù)組 // 基礎(chǔ)類型解構(gòu) let [a, b, c] = [1, 2, 3] console.log(a, b, c) // 1, 2, ...
摘要:執(zhí)行函數(shù)會(huì)返回一個(gè)遍歷器對(duì)象,每一次函數(shù)里面的都相當(dāng)一次遍歷器對(duì)象的方法,并且可以通過(guò)方法傳入自定義的來(lái)改變函數(shù)的行為。函數(shù)可以通過(guò)配合函數(shù)更輕松更優(yōu)雅的實(shí)現(xiàn)異步編程和控制流管理。它和構(gòu)造函數(shù)的不同點(diǎn)類的內(nèi)部定義的所有方法,都是不可枚舉的。 let const的命令 在ES6之前,聲明變量只能用var,var方式聲明變量其實(shí)是很不合理的,準(zhǔn)確的說(shuō),是因?yàn)镋S5里面沒(méi)有塊級(jí)作用域是很不合...
摘要:文章內(nèi)容分兩部分前半部分為迭代器模式概念后半部分為中迭代器上半部分開(kāi)始迭代器模式提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中的各個(gè)元素,而又不需要暴露該對(duì)象的內(nèi)部表示。下半部分開(kāi)始的迭代器迭代器等同于遍歷器。執(zhí)行該函數(shù),會(huì)返回一個(gè)遍歷器對(duì)象。 showImg(https://segmentfault.com/img/bVbuyaZ?w=800&h=600); 文章內(nèi)容分兩部分: 前半部分為 迭...
摘要:本文從使用對(duì)數(shù)組進(jìn)行遍歷開(kāi)始說(shuō)起,粗略對(duì)比使用進(jìn)行遍歷的差異,并由此引入中可迭代對(duì)象迭代器的概念,并對(duì)其進(jìn)行粗略介紹。說(shuō)到這里,就繼續(xù)說(shuō)一下迭代器關(guān)閉的情況了。確實(shí),符合可迭代協(xié)議和迭代器協(xié)議的。 本文從使用 forEach 對(duì)數(shù)組進(jìn)行遍歷開(kāi)始說(shuō)起,粗略對(duì)比使用 forEach , for...in , for...of 進(jìn)行遍歷的差異,并由此引入 ES6 中 可迭代對(duì)象/迭代器 的概...
閱讀 2233·2023-04-26 02:19
閱讀 2015·2021-11-19 09:40
閱讀 1774·2021-09-29 09:35
閱讀 3639·2021-09-29 09:34
閱讀 4506·2021-09-07 10:16
閱讀 5682·2021-08-11 11:14
閱讀 3640·2019-08-30 15:54
閱讀 1686·2019-08-30 15:53