Set和Map數據組織以及Iterator(遍歷器)的觀點
Set
無序不可反覆的鳩合
1.實例化
new Set();
new Set([]);
new Set('terry');// t e r y
2.Set實例可以挪用的要領
Set 組織的實例有以下屬性。
Set.prototype.constructor:組織函數,默許就是Set函數。
Set.prototype.size:返回Set實例的成員總數。
Set 組織的實例有以下要領。
add(value):增加某個值,返回Set組織自身
delete(value):刪除某個值,返回一個布爾值,示意刪除是不是勝利。
has(value):返回一個布爾值,示意該值是不是為Set的成員。
clear():消滅一切成員,沒有返回值。
keys():返回鍵名的遍歷器
values():返回鍵值的遍歷器
entries():返回鍵值對的遍歷器
forEach():運用回調函數遍歷每一個成員
Set自身就是就是一個組織函數,用來天生Set數據組織
let set = new Set();
set.add(1); //增加數據
set.add(2);
set.add(3);
set.add(2);
console.log(set); //set{1,2,3}
運用:去除數組中反覆元素的要領
let arr = [1,2.3,4,3,2,1];
let set = new Set(arr);
let result = [...set]; //set轉換為數組
Map
Map可以接收一個數組作為參數,該數組的成員是一個個示意鍵值對的數組
let map = new Map();
map.set('name','terry');
const map = new Map([ ['name', '張三'], ['title', 'Author'] ]);
Map 組織的實例有以下屬性。
Set.prototype.size:返回 Map 組織的成員總數。
Map 組織的實例有以下要領。
set(key, value):set要領設置鍵名key對應的鍵值為value,然後返回全部 Map 組織。假如key已經有值,則鍵值會被更新,不然就新天生該鍵。
get(key):get要領讀取key對應的鍵值,假如找不到key,返回undefined。
has(key):has要領返回一個布爾值,示意某個鍵是不是在當前 Map 對象當中。
delete(key):delete要領刪除某個鍵,返回true。假如刪除失利,返回false。
clear():消滅一切成員,沒有返回值
keys():返回鍵名的遍歷器
values():返回鍵值的遍歷器
entries():返回鍵值對的遍歷器
forEach():運用回調函數遍歷每一個成員
Iterator
遍歷器(Iterator)就是如許一種機制。它是一種接口,為種種差別的數據組織供應一致的接見機制。任何數據組織只需布置Iterator接口,就可以完成遍歷操縱(即順次處理該數據組織的一切成員)
Iterator 的作用有三個:
- 為種種數據組織,供應一個一致的、輕便的接見接口;
- 使得數據組織的成員可以按某種序次分列;
- ES6製造了一種新的遍歷敕令for…of輪迴,Iterator接口重要供for…of消耗。
Iterator 的遍歷歷程:
- 建立一個指針對象,指向當前數據組織的肇端位置。也就是說,遍歷器對象本質上,就是一個指針對象。
- 第一次挪用指針對象的next要領,可以將指針指向數據組織的第一個成員。
- 第二次挪用指針對象的next要領,指針就指向數據組織的第二個成員。
- 不停挪用指針對象的next要領,直到它指向數據組織的完畢位置。
默許Iterator接口
Iterator 接口的目標,就是為一切數據組織,供應了一種一致的接見機制,即for…of輪迴(詳見下文)。當運用for…of輪迴遍歷某種數據組織時,該輪迴會自動去尋覓 Iterator 接口。一種數據組織只需布置了 Iterator 接口,我們就稱這類數據組織是“可遍歷的”(iterable)。
可以經由過程以下要領接見Iterator對象
var iterator = iterObj[Symbol.iterator]();
原生具有 Iterator 接口的數據組織以下
Array
Map
Set
String
TypedArray
函數的 arguments 對象
NodeList 對象