Set
Set的基本用法
set
类似于数组,且成员值不重复都是唯一的,set
本身是一个构造函数。
const set=new Set();
[1,1,2,3,3,4,4,5,6,7].forEach(item=>set.add(item));
[...set] // [1, 2, 3, 4, 5, 6, 7]
上面代码通过add()
方法向实例结构加入新的成员,结果表明不会添加重复的值
Set
多用于去重,亦可接收数组或( 或者具有iterable
接口的其他数据结构 )作为参数
// 例一
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
相同的方法也可以将String
类型中的重复字符去掉
[...new Set('ababbc')].join('')
// "abc"
以上可以理解为在向SET
中add成员时,不会进行类型转换,也就是时即将加入的成员会与已有成员进行===
比较,但是在Set
中NaN
等于自身
let set=new Set();
let a=NaN,b=NaN
set.add(a);
set.add(b);
set.add(5);
set.add('5');
set //{NaN, 5, "5"}
Set实例的属性
-
Set.prototype.constructor
构造函数 -
Set.prototype.size
返回set
实例成员的长度
Set的操作方法
-
Set.prototype.add()
添加值,放回Set结构本身 -
Set.prototype.delete()
删除某个值。返回booler值 -
Set.prototype.has()
返回booler值,用于检测该值是否为Set的成员 -
Set.prototype.clear()
清楚所有成员,没有返回值
let sw=new Set();
sw.add(1).add(2).add(2);
sw.size//2
sw.has(2)//true
sw.delete(2);
sw.has(2)//false
sw.clear()
sw.size//0
Set的遍历方法
-
Set.prototype.keys()
:返回键名的遍历器 -
Set.prototype.values()
:返回键值的遍历器 -
Set.prototype.entries()
:返回键值对的遍历器 -
Set.prototype.forEach()
:使用回调函数遍历每个成员
由于 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"]
Set实例和数组一样可以拥有forEach
方法,且没有返回值
let cccc = new Set(['学习', '存储', ]);
cccc.forEach((value, key) => console.log(key + ' : ' + value))
//学习 : 学习
//存储 : 存储
同样...
数组的map
和filter
方法也可以间接用于 Set
//并集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let union=new Set(..a,..b);
// Set {1, 2, 3, 4}
//交集
let intersect=new Set([...a].filter(item=>b.has(item)))
console.log(intersect)//Set(2) {2, 3}
//差集
let different=new Set([...a].filter(item=>!b.has(item)))
console.log(different)//Set(1) {1}
let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2));
// 返回Set结构:{2, 4, 6}
关于更多请查看Set 和 Map 数据结构
网友评论