本文實例講述了ES6中Set和Map數(shù)據(jù)結(jié)構(gòu),Map與其它數(shù)據(jù)結(jié)構(gòu)互相轉(zhuǎn)換操作。分享給大家供大家參考,具體如下:
ES6 的 Set:
ES6 提供了新的數(shù)據(jù)結(jié)構(gòu)──Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。
Set 本身是一個構(gòu)造函數(shù),用來生成 Set 數(shù)據(jù)結(jié)構(gòu)。
Array和Set對比
都是一個存儲多值的容器,兩者可以互相轉(zhuǎn)換,但是在使用場景上有區(qū)別。如下:
①Array的indexOf方法比Set的has方法效率低下
②Set不含有重復(fù)值(可以利用這個特性實現(xiàn)對一個數(shù)組的去重)
③Set通過delete方法刪除某個值,而Array只能通過splice。兩者的使用方便程度前者更優(yōu)
④Array的很多新方法map、filter、some、every等是Set沒有的(但是通過兩者可以互相轉(zhuǎn)換來使用)
let set = new Set();set.add(1);set.add("1");console.log(set.size); // 2可以使用數(shù)組來初始化一個 Set ,并且 Set 構(gòu)造器會確保不重復(fù)地使用這些值:
let set = new Set([1, 2, 3, 4, 5, 5, 5, 5]);console.log(set.size); // 5
add(value): 添加某個值,返回Set結(jié)構(gòu)本身
has(value): 返回布爾值,表示該值是否為Set的成員
let set = new Set();set.add(1);set.add("1");console.log(set.has(1)); // trueconsole.log(set.has(6)); // falsedelete(value): 刪除某個值,返回一個布爾值,表示是否成功
clear(value):清除所有成員,沒有返回值
let set = new Set();set.add(1);set.add("1");console.log(set.has(1)); // trueset.delete(1);console.log(set.has(5)); // falseconsole.log(set.size); // 1set.clear();console.log(set.size); // 0keys():返回鍵名的遍歷器
values(): 返回健值對的遍歷器
entries():返回鍵值對的遍歷器
forEach(): 每個成員
let set = new Set(['red', 'green', 'blue']);for (let item of set.keys()) { console.log(item);}// red// green// bluefor (let item of set.values()) { console.log(item);}// red// green// bluefor (let item of set.entries()) { console.log(item);}// ["red", "red"]// ["green", "green"]// ["blue", "blue"]forEach()
let set = new Set([1, 2]);set.forEach(function(value, key, ownerSet) { console.log(key + ": " + value);});// 輸出// 1 :1// 2: 2let arr = [1, 2, 2, 3];let set = new Set(arr);let newArr = Array.from(set);console.log(newArr); // [1, 2, 3]
Set集合轉(zhuǎn)化Array數(shù)組
let set = new Set([1, 2, 3, 3, 4]);let arr = Array.from(set) //輸出[1,2,3,4]
WeakSet結(jié)構(gòu)與Set類似,它與Set有兩個區(qū)別:
新聞熱點
疑難解答
圖片精選