JavaScript的Set數據結構詳解
1. 什麼是 Set
Set 可以簡單的看作是數學上的集合。
它是一系列無序,沒有重復數值的數據集合。
2. Set 構造函數
對於 Set 的構造函數的參數,可以傳遞以下幾種形式。
2.1) 數組
const s = new Set([1, 2, 1]); console.log(s);
這裡傳遞瞭一個數組[1, 2, 1]
作為參數,由於 Set 是無重復數值的集合,所以第三個 1 自動刪除瞭。
2.2) 字符串
const s = new Set("Hello World!"); console.log(s);
2.3) arguments
function fun() { const s = new Set(arguments); console.log(s); } fun(1, 2, 3);
2.4) NodeList
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>set</title> </head> <body> <p>1</p> <p>2</p> <p>3</p> <script> const s = new Set(document.querySelectorAll('p')); console.log(s); </script> </body> </html>
這裡將三個p
標簽的引用放進瞭Set
s中;
當我們要用的時候,就可以遍歷這個 Set
,然後分別將p
標簽的引用取出來,然後就可以對p
標簽進行修改瞭。
2.5) Set
const s1 = new Set([1, 2, 3]); const s2 = new Set(s1); console.log(s2);
這裡相當於把s1
復制過去,給瞭s2
,不過它們不是同一個Set
console.log(s1 === s2);
3. Set 的實例屬性和方法
Set 的屬性,有一個屬性size
,用來存儲它的成員個數
const s = new Set([1, 2, 3]); console.log(s.size);
Set的方法
add
給 Set 中添加成員
const s = new Set([1, 2, 3]);// 它的參數隻能傳一個s.add(5);console.log(s);// 可以連綴 adds.add(7).add(9);console.log(s);
delete
用來刪除 Set 中的成員
const s = new Set([1, 2, 3]); s.delete(2); // 如果要刪除的東西在 Set 中找不到,將什麼也不會發生,也不會報錯 s.delete(5); console.log(s);
has
用來判斷 Set 是否含有某個成員
const s = new Set([1, 2, 3]); console.log(s.has(1)); console.log(s.has(5));
clear
將會刪除 Set 的所有成員
const s = new Set([1, 2, 3]); s.clear(); console.log(s);
4. Set 的成員訪問
它的成員訪問要通過 forEach
方法實現,遍歷 Set,它的遍歷是按成員的添加順序來進行遍歷的。
它有兩個參數,第一個參數為回調函數,第二個參數設定回調函數中this
指向什麼,即
s.forEach(回調函數, 回調函數的指向)
我們先來看第一個參數:
對於第一個參數回調函數,它有三個參數:
s.forEach(function(value, key, set){ value 就是 Set 的成員 在 Set 中,value 和 key 是相等的 set 就是前面Set的本身,即這裡 set === s });
通過一個例子理解一下:
const s = new Set([1, 2, 3]); s.forEach(function(value, key, set) { console.log(value, key, value === key); console.log(set, set === s); });
再來看第二個參數:
const s = new Set([1, 2, 3]); s.forEach(function(value, key, set) { console.log(this); }, document);
5. Set 的註意事項
Set 對重復值的判斷基本遵循嚴格相等===
的判斷
不過對於NaN
,在 Set 中,NaN
等於 NaN
6. Set 的使用場景
數組去重
let arr = [1, 2, 1]; const s = new Set(arr); arr = [...s]; // 也可以合成一句 // arr = [...new Set(arr)]; console.log(arr);
字符串去重
let str = "11231131242"; const s = new Set(str); str = [...s].join(""); // 也可以寫成一句 // str = [...new Set(str)].join(""); console.log(str);
存放 DOM 元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>set</title> </head> <body> <p>1</p> <p>2</p> <p>3</p> <script> const s = new Set(document.querySelectorAll('p')); s.forEach((elem) => { console.log(elem) }); </script> </body> </html>
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- JavaScript中的Map數據結構詳解
- 一篇文章帶你瞭解JavaScript的解構賦值
- JavaScript 中的文檔對象模型 DOM
- JavaScript中函數的防抖與節流詳解
- JavaScript中let避免閉包造成問題