摘要:數據結構類似于數組,但是成員的值都是唯一的,沒有重復。本身是一個構造函數,用來生成數據結構。函數接受一個數組或者具有接口的其他數據結構作為參數。遍歷的應用擴展運算符內部使用循環,所以也可以用于結構。
Set數據結構類似于數組,但是成員的值都是唯一的,沒有重復。
Set本身是一個構造函數,用來生成Set數據結構。
Set 結構不會添加重復的值。
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函數接受一個數組(或者具有 iterable接口的其他數據結構)作為參數。
// 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))
數組去重的方法 [...new Set(array)]
注意:向Set加入值時,不會發生類型轉換,所以 5 和 “5” 是兩個不同的值。Set內部判斷兩個值是否相同使用的算法叫做“Same-value equality”類似于“===”,主要區別在于 NaN等于自身,而 精確相等認為 NaN 不等于自身。
另外,兩個對象總是不相等的。
let set = new Set();
set.add({});
set.size // 1
set.add({})
set.size // 2
Set 實例的屬性和方法
Set.prototype.constructor: 構造函數
Set.prototype.size: Set 實例的成員總數
add(value) :添加某個值,返回set結構本身
delete(value) :刪除某個值,返回布爾值,表示是否成功
has(value):返回布爾值,表示參數是否為Set成員
clear(value):清除所有成員,沒有返回值。
// 對象寫法
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轉化為數組。
const items = new Set([1,2,3,4,5]);
const array = Array.from(items);
// 去除數組重復元素的方法
function dedupe(array){
return Array.from(new Set(array))
}
dedupe([1,2,3,3,2]); // [1,2,3]
keys()
values()
entries()
forEach()
特別指出:Set遍歷順序就是插入順序。比如可以使用Set保存一個回調函數列表,調用時,就可以按照添加順序來調用。
keys,values,entries 方法都是返回遍歷器對象。由于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 循環遍歷Set。
set 結構的 forEach 對于每個成員執行操作,沒有返回值。
let set = new Set([1,2,3])
set.forEach((value,key) => console.log(value * 2))
擴展運算符(...)內部使用 for of 循環,所以也可以用于Set結構。
let set = new Set(["red","green","blue"])
let arr = [...set]
//["red","green","blue"]
擴展運算符(...)結合set,就可以進行數組去重
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結構,很容易實現 并集,交集,差集
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)))
如果想在遍歷操作中,同步改變原來的Set結構,沒有直接的辦法。只能變通一下,一種是利用原來的Set結構映射一個新的結構,然后賦值給原來的Set結構,另一種就是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))
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/6867.html
摘要:固有對象由標準規定,隨著運行時創建而自動創建的對象實例。普通對象由語法構造器或者關鍵字定義類創建的對象,它能夠被原型繼承。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有winter的語音】,如有侵權請聯系我,郵箱:ka...
摘要:固有對象由標準規定,隨著運行時創建而自動創建的對象實例。普通對象由語法構造器或者關鍵字定義類創建的對象,它能夠被原型繼承。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有winter的語音】,如有侵權請聯系我,郵箱:ka...
摘要:固有對象由標準規定,隨著運行時創建而自動創建的對象實例。普通對象由語法構造器或者關鍵字定義類創建的對象,它能夠被原型繼承。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有winter的語音】,如有侵權請聯系我,郵箱:ka...
摘要:的碼點被稱為基本字符區域。關于的介紹,我準備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數前不能使用命令,否則會報錯。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完...
閱讀 3156·2021-11-22 09:34
閱讀 2797·2021-09-22 15:28
閱讀 816·2021-09-10 10:51
閱讀 1853·2019-08-30 14:22
閱讀 2273·2019-08-30 14:17
閱讀 2734·2019-08-30 11:01
閱讀 2295·2019-08-29 17:19
閱讀 3653·2019-08-29 13:17