Set
创建一个Set实例
可以将一个数组或者Set传入构造函数
const set = new Set([0,1,2]);
实例的属性和方法
属性/方法 | 描述 | 返回值 |
---|---|---|
set.size | 集合元素的个数 | 返回集合元素的个数 |
set.add(value) | 添加元素到集合内 | 返回set实例 |
set.delete(value) | 删除集合内的指定元素 | 返回一个布尔值,表示是否删除成功 |
set.clear() | 清空集合 | / |
set.has(value) | 检查集合是否含有某元素 | 返回一个布尔值,表示集合是否含有某元素 |
set.forEach((value,key,set)=>{}[,context]) | 遍历集合 | / |
set.entries() | 遍历集合 | 返回一个以二元数组即键值对作为元素的可迭代对象 |
set.keys() | 遍历集合 | 返回一个以当前集合中所有键作为元素的可迭代对象 |
set.values() | 遍历集合 | 返回一个以当前集合中所有值作为元素的可迭代对象 |
- 需要特别指出的是,Set的遍历顺序就是插入顺序。
Set 结构的键名就是键值(两者是同一个值),因此set.keys()和set.values()效果完全一样,以及set.forEach中的第一个参数和第二个参数两者值永远是一样的。
let set = new Set([1, 4, 9]);
set.forEach((value, key) => console.log(key + ' : ' + value))
// 1 : 1
// 4 : 4
// 9 : 9
应用利用元素不重复性进行数组去重
function unique(arr){
return Array.from(new set(array))
}
比较Set与Array
顺序和重复性的比较 | | Set | Array | | —- | —- | —- | | 元素序列 | 无序 | 有序 | | 元素可重复性 | 不可重复 | 可重复 |
用forEach遍历时新增元素的表现不同
const arr = [1]
arr.forEach(f => {
console.log(f)
arr.push(2);
})
// 1
forEach遍历数组时,如果在遍历过程中给数组新增元素,并不会遍历新增的元素。
const set = new Set([1]);
set.forEach(f => {
console.log(f)
set.add(2)
});
// 1
// 2
forEach遍历Set时,如果在遍历过程中给Set新增元素,会遍历新增的元素。如果想避免此种情况,可以将set作为初始值传给另一个set。
const set = new Set([1]);
const newSet = new Set(set);
newSet.forEach(f => {
console.log(f)
set.add(2)
});
// 1
WeakSet
约束
- 不能包含值类型的元素,也不能包含无引用的对象,否则会自动被清除出集合
- 实例的方法就三个
实例的属性和方法
属性和方法 | 描述 | |
---|---|---|
weakset.add(value) | 添加元素 | |
weakset.delete(value) | 删除元素 | |
weakset.has(value) | 检查集合是否含有元素 |