JavaScript的Set數(shù)據(jù)結(jié)構(gòu)詳解
1. 什么是 Set
Set 可以簡單的看作是數(shù)學(xué)上的集合。
它是一系列無序,沒有重復(fù)數(shù)值的數(shù)據(jù)集合。
2. Set 構(gòu)造函數(shù)
對于 Set 的構(gòu)造函數(shù)的參數(shù),可以傳遞以下幾種形式。
2.1) 數(shù)組
const s = new Set([1, 2, 1]); console.log(s);
這里傳遞了一個(gè)數(shù)組[1, 2, 1]
作為參數(shù),由于 Set 是無重復(fù)數(shù)值的集合,所以第三個(gè) 1 自動(dòng)刪除了。
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>
這里將三個(gè)p
標(biāo)簽的引用放進(jìn)了Set
s中;
當(dāng)我們要用的時(shí)候,就可以遍歷這個(gè) Set
,然后分別將p
標(biāo)簽的引用取出來,然后就可以對p
標(biāo)簽進(jìn)行修改了。
2.5) Set
const s1 = new Set([1, 2, 3]); const s2 = new Set(s1); console.log(s2);
這里相當(dāng)于把s1
復(fù)制過去,給了s2
,不過它們不是同一個(gè)Set
console.log(s1 === s2);
3. Set 的實(shí)例屬性和方法
Set 的屬性,有一個(gè)屬性size
,用來存儲(chǔ)它的成員個(gè)數(shù)
const s = new Set([1, 2, 3]); console.log(s.size);
Set的方法
- add
給 Set 中添加成員
const s = new Set([1, 2, 3]); // 它的參數(shù)只能傳一個(gè) s.add(5); console.log(s); // 可以連綴 add s.add(7).add(9); console.log(s);
- delete
用來刪除 Set 中的成員
const s = new Set([1, 2, 3]); s.delete(2); // 如果要?jiǎng)h除的東西在 Set 中找不到,將什么也不會(huì)發(fā)生,也不會(huì)報(bào)錯(cuò) s.delete(5); console.log(s);
- has
用來判斷 Set 是否含有某個(gè)成員
const s = new Set([1, 2, 3]); console.log(s.has(1)); console.log(s.has(5));
- clear
將會(huì)刪除 Set 的所有成員
const s = new Set([1, 2, 3]); s.clear(); console.log(s);
4. Set 的成員訪問
它的成員訪問要通過 forEach
方法實(shí)現(xiàn),遍歷 Set,它的遍歷是按成員的添加順序來進(jìn)行遍歷的。
它有兩個(gè)參數(shù),第一個(gè)參數(shù)為回調(diào)函數(shù),第二個(gè)參數(shù)設(shè)定回調(diào)函數(shù)中this
指向什么,即
s.forEach(回調(diào)函數(shù), 回調(diào)函數(shù)的指向)
我們先來看第一個(gè)參數(shù):
對于第一個(gè)參數(shù)回調(diào)函數(shù),它有三個(gè)參數(shù):
s.forEach(function(value, key, set){ value 就是 Set 的成員 在 Set 中,value 和 key 是相等的 set 就是前面Set的本身,即這里 set === s });
通過一個(gè)例子理解一下:
const s = new Set([1, 2, 3]); s.forEach(function(value, key, set) { console.log(value, key, value === key); console.log(set, set === s); });
再來看第二個(gè)參數(shù):
const s = new Set([1, 2, 3]); s.forEach(function(value, key, set) { console.log(this); }, document);
5. Set 的注意事項(xiàng)
Set 對重復(fù)值的判斷基本遵循嚴(yán)格相等===
的判斷
不過對于NaN
,在 Set 中,NaN
等于 NaN
6. Set 的使用場景
數(shù)組去重
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>
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- JS中的算法與數(shù)據(jù)結(jié)構(gòu)之字典(Dictionary)實(shí)例詳解
- JavaScript?數(shù)據(jù)結(jié)構(gòu)之集合創(chuàng)建(2)
- JavaScript?數(shù)據(jù)結(jié)構(gòu)之集合創(chuàng)建(1)
- ?JavaScript?數(shù)據(jù)結(jié)構(gòu)之散列表的創(chuàng)建(1)
- Go語言的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)JSON
- JS使用reduce()方法處理樹形結(jié)構(gòu)數(shù)據(jù)
- python 如何將字典寫為json文件
- python將字典內(nèi)容寫入json文件的實(shí)例代碼
- python字典和json.dumps()的遇到的坑分析
- JavaScript?數(shù)據(jù)結(jié)構(gòu)之字典方法
相關(guān)文章
使用 JavaScript 創(chuàng)建并下載文件(模擬點(diǎn)擊)
本文將介紹如何使用 JavaScript 創(chuàng)建文件,并自動(dòng)/手動(dòng)將文件下載,這在導(dǎo)出原始數(shù)據(jù)時(shí)會(huì)比較方便2019-10-10js(JavaScript)實(shí)現(xiàn)TAB標(biāo)簽切換效果的簡單實(shí)例
本篇文章主要是對js(JavaScript)實(shí)現(xiàn)TAB標(biāo)簽切換效果的簡單實(shí)例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-02-02js+div實(shí)現(xiàn)圖片滾動(dòng)效果代碼
本篇文章主要是對js+div實(shí)現(xiàn)圖片滾動(dòng)效果的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-02-02ES6模塊化的import和export用法方法總結(jié)
這篇文章主要介紹了ES6模塊化的import和export用法方法總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08通過隱藏iframe實(shí)現(xiàn)文件下載的js方法介紹
本篇文章主要是對通過隱藏iframe實(shí)現(xiàn)文件下載的js方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-02-02javascript自定義函數(shù)參數(shù)傳遞為字符串格式
本節(jié)主要介紹了通過自定義javascript函數(shù)傳遞參數(shù)為字符串格式的,用this傳遞、引號缺省,示例如下2014-07-07