ES6
提供了新的数据结构Set
。它类似于数组
,但是成员的值都是唯一的,没有重复的值,是严格类型约束。
一、基本用法
我们使用new关键字和Set构造函数来创建一个空集合。
let set=new Set();
如果想要创建的同事初始化实例,我们可以传入一个可迭代的对象。
let set=new Set([1,2,3,4,5]);
二、增删改查的API
1. 我们可以用add()增加值
let set=new Set([1,2,3,4,5]);
set.add(6)
console.log(set)
2.我们可以用delete()删除某个值,clear()删除全部值
let set=new Set([1,2,3,4,5]);
set.delete(3)
console.log(set)
set.clear()
console.log(set)
3. 我们可以用has()来查询
let set=new Set([1,2,3,4,5]);
set.has(1); //true
set.has("1"); //false
三、遍历方法
Set结构的实例有四个遍历方法,可以用于遍历成员。
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
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"]
set.forEach(function(val,index){
console.log(val,index)
})
// red red
// green green
// blue blue
遍历时修改值的属性不会影响其作为集合值的身份
//字符串原始值作为值不会被修改
let set1 = new Set(['red']);
for (let item of set1.keys()) {
item="blue";
console.log(set1.has('red')) //true
}
//修改对象的属性值,但是对象仍然存在集合中
var obj={id:1};
let set2 = new Set([obj]);
for (let item of set2.keys()) {
item.id="blue";
console.log(set2.has(obj)) //true
}
四、Array类型和Set类型的互相转化
Array类型转Set类型
var arr=[1,2,3,4,5];
var set=new Set(arr);
Set类型转Array类型
var set=new Set([1,2,3,4,5]);
var arr1=[...set]; //方法一,扩展字符串
var arr2=Array.from(set); //方法二,Array.from
参考:Javascript高级程序设计