ECMAScript6新增的Set是一种新的集合类型,为这门语言带来集合数据结构。Set在很多方面都像是加强的Map,这是因为他们的大多数API和行为都是共有的。
1. 基本API
使用new关键字和Set构造函数创建空集合:
const m = new Set()
Set集合的初始化
- 用数组初始化set集合
const s1 = new Set(["val1","val2","val3"])
alert(s1.size);//3
- 用迭代器初始化Set集合
const s2 = new Set({
[Symbol.iterator]:function*(){
yield "val1";
yield "val2";
yield "val3";
}
});
alert(s2.size);//3
Set集合的增删改查
使用add()增加值,使用has()查询,通过size取得元素数量,以及使用delete()删除元素、clear()清空元素
//构造方法创建Set集合
const s = new Set();
//has()方法查询
alert(s.has("Mart");//false
alert(s.size);//0
//add()方法增加
s.add("Mart")
.add("Frisiable");
alert(s.has("Mart");//true
alert(s.size);//2
//delete()方法删除
s.delete("Mart");
alert(s.has("Mart");//false
alert(s.has("Frisiable");//true
alert(s.size);//1
//clear()方法清空Set集合内的所有元素
s.clear();
alert(s.has("Mart");//false
alert(s.has("Frisiable");//false
alert(s.size);//0
2.顺序与迭代
1.基本的迭代方法
Set集合会维护元素插入时的顺序,因此支持按顺序迭代!
Set集合取得迭代器的方法
第一种 “集合 [Symbol.iterator]” 方法
第二种 “集合.values()”方法
第三种 “集合.keys()”方法
const s = new Set(["val1","val2","val3"]);//true
alert(s.values ===s[Symbol.iterator]);//true
alert(s.keys ===s[Symbol.iterator]);//true
for(let value of s.values()){
alert(value);
}
//val1
//val2
//val3
for(let value of s[Symbol.iterator]()){
alert(value);
}
//val1
//val2
//val3
2.特殊的迭代方法
集合的entries()方法返回一个迭代器,这个迭代器按照元素的插入顺序返回包含两个元素的数组,这两个元素是集合中每个值的重复出现:
const s = new Set(["val1","val2","val3"]);
for(let el of s.entries()){
console.log(el)
}
//["val1","val1"]
//["val2","val2"]
//["val3","val3"]