一,新增的数据结构 Set
1.es6新增了数据类型集合(Set
),集合成员的值都是唯一的,没有重复的值。Set
实例的size
属性返回元素个数。
2.Set
是一个构造函数,可接受数组,或任意有interator
接口的数据类型作为参数,返回一个Set
数据结构。
{
let s = new Set([1,2,3,4,1,1,1])
console.log(s) // {1,2,3,4}
function myAdd(x,y)
{
let s = new Set(arguments) //类数组arguments具有interator接口
return s
}
myAdd(1,2) // {1,2}
}
二,Set实例API
1.add(item)
向Set
里添加元素。注意,Set
加入值的时候,不会发生类型转换,所以1和"1"是两个不同的值。
{
let s = new Set();
s.add(1);
s.add('1');
s.add();
console.log(s) // {1, "1", undefined}
}
2.delete(item)
删除一个元素,返回一个布尔值,表示是否删除成功。
{
let s = new Set([1,2,3,4]);
s.delete(1); // true
s.delete(5); // false
console.log(s) // {2,3,4}
}
3.has(item)
判断是否含有某个元素,返回一个布尔值。
{
let s = new Set([1,2,3,4]);
s.has(1) // true
}
4.clear()
清除所有成员,没有返回值。
{
let s = new Set([1,2,3,4]);
s.clear()
console.log(s) // {}
}
三,Set遍历
1.Set
构造函数的原型上内置了keys()
,values()
,和entries()
,其次还可以用forEach()
完成遍历,因为集合没有键的概念,所以keys()
和values()
的行为一致,返回一个遍历器对象,包含元素中所有值。
{
let s = new Set([1,2,3,4])
for (let v of s.keys())
{
console.log(v) // 1 2 3 4
}
for (let v of s.entries())
{
console.log(v) // [1,1] [2,2] [3,3] [4,4]
}
三,weakSet
1.WeakSet
结构与 Set
类似,也是不重复的值的集合。但是,它与 Set
有两个区别。
首先,WeakSet
的成员只能是对象,而不能是其他类型的值。其次,WeakSet
中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet
对该对象的引用
{
const a = [[1, 2], [3, 4]];
const ws = new WeakSet(a); // WeakSet {[1, 2], [3, 4]}
}
2.weakSet
没有size
属性,也不能被遍历。
3.weakSet
除了没有clear
方法,其他和set
一致