set&&Map数据结构
1.ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。跟java一样的定义的数据结构
const set = new Set();
[1,3,4,5,55,4,4,3,4,5].forEach((value)=>{
set.add(value)
})
for(let v of set){
console.log(v)
}
//1 3 4 5 55
接受数组初始化
const set = new Set([1,2,3,4,3,3,4,5,5,55,3]);
console.log([...set])// [1, 2, 3, 4, 5, 55]
Set 实例的属性和方法
Set 结构的实例有以下属性。
Set.prototype.constructor:构造函数,默认就是Set函数。
Set.prototype.size:返回Set实例的成员总数。
Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。
add(value):添加某个值,返回Set结构本身。
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
has(value):返回一个布尔值,表示该值是否为Set的成员。
clear():清除所有成员,没有返回值。
const set = new Set([1,2,3,4,3,3,4,5,5,55,3]);
console.log(set.delete(1));
console.log([...set]);//[2,3,4,5,55]
console.log(set.has(2)) ;//true
set.clear();
console.log([...set])//[]
Array.from方法可以将 Set 结构转为数组。
const set = new Set([1,2,3,4,3,3,4,5,5,55,3]);
const array = Array.from(set)
console.log(array)
WeakSet :
WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。
首先,WeakSet 的成员只能是对象,而不能是其他类型的值。其次,WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。
WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。
WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在 WeakSet 实例之中。
WeakSet 不能遍历,是因为成员都是弱引用,随时可能消失,遍历机制无法保证成员的存在,很可能刚刚遍历结束,成员就取不到了
Map,比Object更合适的键值对数据结构
let map = new Map()
.set('a', '1')
.set('b', '2b')
.set('c', '3');
console.log([...map.keys()])
console.log([...map.values()])
console.log(map.has('a'))
map.delete('a');
console.log(map.get('a'))
for(let value of map.values())
console.log(value)
for(let item of map.entries()){
console.log(item[0]+":"+item[1])
}
map.clear();
console.log([...map])
WeakMap结构与Map结构类似,也是用于生成键值对的集合。首先,WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。其次,WeakMap的键名所指向的对象,不计入垃圾回收机制