set
功能:
- 数组去重
// 去除数组的重复成员
法1 [...new Set(array)]
法2 Array.from(new Set(array));
- 将类数组转换为数组
const set = new Set(document.querySelectorAll('div'));
set.size // 56
- 去除字符串里面的重复字符。
[...new Set('ababbc')].join('')
// "abc"
2、类似于数组,但是成员的值都是唯一的,没有重复的值。
//本身是一个构造函数,用来生成 Set 数据结构。
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4
向 Set 加入值的时候,不会发生类型转换。
所以5和"5"是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是向 Set 加入值时认为NaN等于自身,而精确相等运算符认为NaN不等于自身。
两个对象总是不相等的。
Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)
操作方法
增删查清,这些方法都添加到原型上了。
- Set.prototype.add(value):添加某个值,返回 Set 结构本身。 可以链式调用
- Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
- Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
- Set.prototype.clear():清除所有成员,没有返回值。
将 Set 结构转为数组
Array.from(new Set(array)); 转换为数组了
遍历方法
名 值 键值对 回调函数
- Set.prototype.keys():返回键名的遍历器
- Set.prototype.values():返回键值的遍历
- Set.prototype.entries():返回键值对的遍历器
- Set.prototype.forEach():使用回调函数遍历每个成员
Set的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用 Set 保存一个回调函数列表,调用时就能保证按照添加顺序调用。
keys方法、values方法、entries方法返回的都是遍历器对象(详见《Iterator 对象》一章)。由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。
3、map
为了解决 对象的键只能接受字符串
Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。
如果 Map 的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map 将其视为一个键,比如0和-0就是一个键,布尔值true和字符串true则是两个不同的键。另外,undefined和null也是两个不同的键。虽然NaN不严格相等于自身,但 Map 将其视为同一个键
let map = new Map();
map.set(-0, 123);
map.get(+0) // 123
map.set(true, 1);
map.set('true', 2);
map.get(true) // 1
map.set(undefined, 3);
map.set(null, 4);
map.get(undefined) // 3
map.set(NaN, 123);
map.get(NaN) // 123
Map 结构的实例的属性和操作方法
大小,设值,获取值,判断,删除,清除
size 属性 => 大小
set => 设置键值对,返回整个map结构,所以可以采用链式调用
get=> 获取key对应的关键值
has=> 判断某个键是否在当前map对象中
delete=> 删除某个键,判断是否删除成功,删除失败,则返回false
clear=> 清楚所有成员,没有返回值
map结构的遍历方法