Set-ES6提供的一种新的数据结构
Set
是一个构造函数,类似于Array
; 但是 set 结构只能通过new Set
来创建
特性
1.Set数据结构类似于数组,但是成员的值唯一。
2.由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值,key 和 value都是同一个值
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
console.log([...s])//[2,3,5,4]
set结构
- 用途
1.数组/字符串去重
Set函数可以接受一个数组或者类数组对象作为参数,用来初始化,...
扩展运算符可以将set结构变成数组
//数组去重
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
// 例二
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items.size // 5
//字符串去重
[...new Set('ababbc')].join('')
// "abc"
注意
向 Set 加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是向 Set 加入值时认为NaN等于自身,而精确相等运算符认为NaN不等于自身。另外,两个对象总是不相等的
- 属性
1.Set.prototype.constructor
: 构造函数,默认就是Set
函数
2.Set.prototype.size/Set.size
: 返回Set
实例的总数 - 操作方法
1.Set.prototype.add(value)
: 添加某个值,返回 Set 结构本身。
2.Set.prototype.delete(value)
: 删除某个值,返回一个布尔值,表示删除是否成功。
3.Set.prototype.has(value)
: 返回一个布尔值,表示该值是否为Set的成员.
4.Set.prototype.clear()
: 清除所有成员,没有返回值。
s.add(1).add(2).add(2);
// 注意2被加入了两次
s.size // 2
s.has(1) // true
s.has(2) // true
s.has(3) // false
s.delete(2);
s.has(2) // false
- 遍历方法
1.Set.prototype.keys()
: 返回键名的遍历器
2.Set.prototype.values()
: 返回键值的遍历器
3.Set.prototype.entries()
: 返回键值对的遍历器
4.Set.prototype.forEach()
: 使用回调函数遍历每个成员
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"]
let set = new Set(['red', 'green', 'blue']);
for (let x of set) {
console.log(x);
}
// red
// green
// blue
- 将
Set
结构转为数组
1....
扩展运算符
const s = new Set([1,2,3,4]);
console.log([...s])//[1, 2, 3, 4]
2.Array.from
方法
const items = new Set([1, 2, 3, 4, 5]);
const array = Array.from(items);
console.log(array)//[1, 2, 3, 4, 5]
数组去重
function dedupe(array) {
return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]) // [1, 2, 3]
网友评论