摘要:數(shù)據(jù)結(jié)構(gòu)類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)。本身是一個(gè)構(gòu)造函數(shù),用來生成數(shù)據(jù)結(jié)構(gòu)。函數(shù)接受一個(gè)數(shù)組或者具有接口的其他數(shù)據(jù)結(jié)構(gòu)作為參數(shù)。遍歷的應(yīng)用擴(kuò)展運(yùn)算符內(nèi)部使用循環(huán),所以也可以用于結(jié)構(gòu)。
Set數(shù)據(jù)結(jié)構(gòu)類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)。
Set本身是一個(gè)構(gòu)造函數(shù),用來生成Set數(shù)據(jù)結(jié)構(gòu)。
Set 結(jié)構(gòu)不會(huì)添加重復(fù)的值。
const s = new Set();
[2,3,5,4,4,2,2].froEach(x => s.add(x));
for(let i of s) {
console.log(i)
}
// 2 3 4 5
Set函數(shù)接受一個(gè)數(shù)組(或者具有 iterable接口的其他數(shù)據(jù)結(jié)構(gòu))作為參數(shù)。
// example 1
const set = new Set([1,2,3,4,4]);
[...set]
// [1,2,3,4]
// example 2
const items = new Set([1,2,3,4,5,5,5,5]);
items.size // 5
// example 3
function divs(){
return [...document.querySelectorAll("div")]
}
const set = new Set(divs());
set.size // 60
//類似于
divs().forEach(div => set.add(div))
數(shù)組去重的方法 [...new Set(array)]
注意:向Set加入值時(shí),不會(huì)發(fā)生類型轉(zhuǎn)換,所以 5 和 “5” 是兩個(gè)不同的值。Set內(nèi)部判斷兩個(gè)值是否相同使用的算法叫做“Same-value equality”類似于“===”,主要區(qū)別在于 NaN等于自身,而 精確相等認(rèn)為 NaN 不等于自身。
另外,兩個(gè)對(duì)象總是不相等的。
let set = new Set();
set.add({});
set.size // 1
set.add({})
set.size // 2
Set 實(shí)例的屬性和方法
Set.prototype.constructor: 構(gòu)造函數(shù)
Set.prototype.size: Set 實(shí)例的成員總數(shù)
add(value) :添加某個(gè)值,返回set結(jié)構(gòu)本身
delete(value) :刪除某個(gè)值,返回布爾值,表示是否成功
has(value):返回布爾值,表示參數(shù)是否為Set成員
clear(value):清除所有成員,沒有返回值。
// 對(duì)象寫法
const properties = {
"width" : 1,
"height": 1
}
if(properties[someName]){
// do something
}
//Set 寫法
const properties = new Set();
properties.add("width");
properties.add("height");
if(properties.has(someName){
// do something
}
Array.from方法將Set轉(zhuǎn)化為數(shù)組。
const items = new Set([1,2,3,4,5]);
const array = Array.from(items);
// 去除數(shù)組重復(fù)元素的方法
function dedupe(array){
return Array.from(new Set(array))
}
dedupe([1,2,3,3,2]); // [1,2,3]
keys()
values()
entries()
forEach()
特別指出:Set遍歷順序就是插入順序。比如可以使用Set保存一個(gè)回調(diào)函數(shù)列表,調(diào)用時(shí),就可以按照添加順序來調(diào)用。
keys,values,entries 方法都是返回遍歷器對(duì)象。由于Set沒有鍵名,只有鍵值,(或者說是 鍵名和鍵值是一樣的),所以,keys和values方法的行為完全一致。
let set = new Set(["red","green","blue"]);
for(let item of set.keys()){
console.log(item)
}
// red
// green
// blue
let set = new Set(["red","green","blue"]);
for(let item of set.values()){
console.log(item)
}
// red
// green
// blue
let set = new Set(["red","green","blue"]);
for(let item of set.entries()){
console.log(item)
}
// ["red","red"]
// ["green","green"]
// ["blue","blue"]
可以直接用 for ... of 循環(huán)遍歷Set。
set 結(jié)構(gòu)的 forEach 對(duì)于每個(gè)成員執(zhí)行操作,沒有返回值。
let set = new Set([1,2,3])
set.forEach((value,key) => console.log(value * 2))
擴(kuò)展運(yùn)算符(...)內(nèi)部使用 for of 循環(huán),所以也可以用于Set結(jié)構(gòu)。
let set = new Set(["red","green","blue"])
let arr = [...set]
//["red","green","blue"]
擴(kuò)展運(yùn)算符(...)結(jié)合set,就可以進(jìn)行數(shù)組去重
let arr = [1,2,3,2,5,3,4,5]
let unique = [... new Set(arr)]
// [1,2,3,4,5]
map和filter 也可以用于 Set
let set = new Set([1,2,3])
set = new Set([...set].map(x => x*2))
// set {2,4,6}
let set = new Set([1,2,3,4,5])
set = new Set([...set].filter(x => (x%2) == 0))
使用Set結(jié)構(gòu),很容易實(shí)現(xiàn) 并集,交集,差集
let a = new Set([1,2,3])
let b = new Set([4,3,2])
//并集
let union = new Set([...a,...b])
//交集
let intersect = new Set([...a].filter(x => b.has(x)))
//差集
let difference = new Set([...a].filter(x => !b.has(x)))
如果想在遍歷操作中,同步改變?cè)瓉淼腟et結(jié)構(gòu),沒有直接的辦法。只能變通一下,一種是利用原來的Set結(jié)構(gòu)映射一個(gè)新的結(jié)構(gòu),然后賦值給原來的Set結(jié)構(gòu),另一種就是Array.from
//1
let set = new Set([1,2,3])
set = new Set([...set].map(val => val*2)
//2
let set = new Set([1,2,3])
set = new Set(Array.from(set,val => val*2))
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/6867.html
摘要:固有對(duì)象由標(biāo)準(zhǔn)規(guī)定,隨著運(yùn)行時(shí)創(chuàng)建而自動(dòng)創(chuàng)建的對(duì)象實(shí)例。普通對(duì)象由語法構(gòu)造器或者關(guān)鍵字定義類創(chuàng)建的對(duì)象,它能夠被原型繼承。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱:ka...
摘要:固有對(duì)象由標(biāo)準(zhǔn)規(guī)定,隨著運(yùn)行時(shí)創(chuàng)建而自動(dòng)創(chuàng)建的對(duì)象實(shí)例。普通對(duì)象由語法構(gòu)造器或者關(guān)鍵字定義類創(chuàng)建的對(duì)象,它能夠被原型繼承。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱:ka...
摘要:固有對(duì)象由標(biāo)準(zhǔn)規(guī)定,隨著運(yùn)行時(shí)創(chuàng)建而自動(dòng)創(chuàng)建的對(duì)象實(shí)例。普通對(duì)象由語法構(gòu)造器或者關(guān)鍵字定義類創(chuàng)建的對(duì)象,它能夠被原型繼承。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱:ka...
摘要:的碼點(diǎn)被稱為基本字符區(qū)域。關(guān)于的介紹,我準(zhǔn)備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對(duì)象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數(shù)前不能使用命令,否則會(huì)報(bào)錯(cuò)。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要點(diǎn)筆記以及感悟,完...
閱讀 3171·2021-11-22 09:34
閱讀 2809·2021-09-22 15:28
閱讀 840·2021-09-10 10:51
閱讀 1869·2019-08-30 14:22
閱讀 2334·2019-08-30 14:17
閱讀 2748·2019-08-30 11:01
閱讀 2308·2019-08-29 17:19
閱讀 3675·2019-08-29 13:17