02-Set和Map
# Set
# Set 定义
Set 是一系列无序、没有重复值的数据集合。
const s = new Set();
s.add(1);
s.add(2);
1
2
3
2
3
Set 没有下标去标示每一个值,所以 Set 是无序的,也不能像数组那样通过下标去访问 Set 的成员。
Set 通过严格相等
===
来判断是否是重复的元素,除了一个特例NaN
。因为NaN === NaN
的结果是 false,但是在 Set 中只能只能有一个NaN
。
# Set 实例的方法和属性
方法
const s = new Set();
// 添加
s.add(1);
s.add(2).add(2);
// 包含
console.log(s.has(1)); // true
// 删除
s.delete(1);
s.clear();
// 遍历
// 参数一:回调函数; 参数二:回调函数的this指向
s.forEach(function (value, key, set) {
// Set 中 value == key
console.log(value);
// console.log(this);
}, document);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
属性,就一个 size
。
const s = new Set();
s.add(1).add(2).add(2);
console.log(s.size); // 2
1
2
3
4
2
3
4
# Set 构造函数
前面我们调用构造函数创建 Set 没有传参数,其实 Set 可以接收以下参数:Set、数组、类数组、字符串。
// 数组
const s1 = new Set([1, 2, 1]);
// 字符串
const s2 = new Set('hi'); // Set(2) {"h", "i"}
// arguments
function func() {
return new Set(arguments);
}
let s3 = func(1, 2, 1);
// NodeList
let s4 = new Set(document.querySelectorAll('p'));
// Set
const s5 = new Set(s1);
console.log(s5 === s1); // false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Map
# Map 定义
Map 表示映射,和对象类似,都是键值对的集合。
const m = new Map();
m.set('name', 'alex');
m.set('age', 18);
console.log(m);
1
2
3
4
5
2
3
4
5
对象用字符串作为键,而 Map 可以使用任何数据类型作为键。另外只有模拟现实世界的实体时,才使用对象。
const m = new Map();
m.set('name', 'alex');
m.set(true, 'true');
m.set({}, 'object');
m.set(new Set([1, 2]), 'set');
m.set(undefined, 'undefined');
1
2
3
4
5
6
2
3
4
5
6
Map 判断 Key 是否相同的逻辑和 Set 相同,使用严格等于
===
,特例是NaN
。
# Map 实例的方法和属性
方法
const m = new Map();
// 使用 set 添加的新成员,键如果已经存在,后添加的键值对覆盖已有的
m.set('age', 18).set(true, 'true').set('age', 20);
// get 获取不存在的成员,返回 undefined
const v1 = m.get('true'); // undefined
const v2 = m.get(true); // 'true'
// has
console.log(m.has('age')); // true
// delete
m.delete('age');
// clear
m.clear();
// forEach
m.forEach(function (value, key, map) {
console.log(`${key} => ${value}`);
// console.log(this);
}, document);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
属性:size
console.log(m.size);
1
# Map 构造函数
Map 构造函数可以接收数组、Set、Map。
// 1.数组
// 只能传二维数组,以体现键值关系
const m1 = new Map([
['name', 'alex'],
['age', 18]
]);
// 2.Set
// Set 中也必须体现出键和值
const s = new Set([
['name', 'alex'],
['age', 18]
]);
const m2 = new Map(s);
// 3.Map
const m3 = new Map(m1);
console.log(m3 === m1); // false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
编辑 (opens new window)
上次更新: 2023/06/04, 12:34:19