JS---Set
- 1.?什么是 Set
- 2.?Set 建構式
- 2.1)?陣列
- 2.2)?字串
- 2.3)?arguments
- 2.4)?NodeList
- 2.5)? Set
- 3.?Set 的實體屬性和方法
- 4.?Set 的成員訪問
- 5.?Set 的注意事項
- 6.?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);
// 可以連綴 add
s.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>

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/402758.html
標籤:其他
