一、 Set
基本用法
Set 是ES6新增的数据结构。它类似于数组,但是成员的值都是唯一的,没有重复的值。
根据它的规则,可以用于数组去重:
let a = [1,2,3,4,3,2];
let set = new Set(a);
console.log(set);
//Set {1,2,3,4}
- 实例化
let set = new Set(); //实例化一个空 set 集合
- 遍历
- keys() 返回键名的遍历器
- values() 返回键值的遍历器
- entries() 返回键值对的遍历器
- forEach() 使用回调函数遍历每个成员
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
for (let item of set.values()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.entries()) {
console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
上面代码中,entries方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。
遍历的应用
扩展运算符(...)内部使用for...of 循环,所以也可以用于Set结构。
let set = new Set(['red', 'green', 'blue']);
let arr = [...set];
// ['red', 'green', 'blue']
for...of用法:
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach((x)=>{s.add(s)}); //箭头函数,一般用于回调函数
for (let i of s) { //for..of 可以遍历数组
console.log(i); //输出数组中每个成员
}
console.log(s); //输出添加了数之后的 s 集合
// 2 3 5 4
//Set {2,3,4,5}
上面的代码通过add方法向Set结构加入成员,结果表明Set结构不会添加重复的值。
- 增删改查
- add() 添加某个值,返回Set结构本身
- delete() 删除某个值,返回boolean,true表示删除成功
- has() 查询某个值,返回boolean,true表示该值是Set的成员
- clear() 清除所有成员,没有返回值
s.add(1).add(2).add(2); // 注意2被加入了两次 s.size // 2 s.has(1) // true node环境 s.has(2) // true s.has(3) // false s.delete(2); s.has(2) // false
注意:
let set = new Set();
let a = NaN;
let b = NaN;
set.add(a);
set.add(b);
set // Set {NaN}
-------------
let set = new Set();
set.add({});
set.size // 1
set.add({});
set.size // 2
在上面代码中,结果说明,在Set内部,两个NaN是相等的,而两个对象是不相等的,即使对象的内容一样。
二、Map
- 实例化
let map = new Map(); //实例化一个空 map 集合
- 集合的增删改查
- map.put()
- map.delete()
- map.clear()
- map.has()
- map.size()
const map = new Map([
['name', '张三'],
['title', 'Author']
]);
map.size // 2
map.has('name') // true
map.get('name') // "张三"
map.has('title') // true
map.get('title') // "Author"
- 遍历
keys()
:返回键名的遍历器。
values()
:返回键值的遍历器。
entries()
:返回所有成员的遍历器。
forEach()
:遍历 Map 的所有成员。
------------------本文完------------------