ECMAScript6之Set结构和Map结构

时间:2022-08-27 13:02:32

set数据结构

ES6提供了一个新的数据结构,Set,Set和Array数组相似,但是Set里没有重复的数据,可以说是一个值的集合。
同时,Set数据结构有以下属性和方法:

  • size:返回成员总数
  • add(value):添加某个值
  • delete(value):删除某个值
  • has(value):返回一个布尔值,表示Set中是否有该成员
  • clear():清除所有成员
  • entries():返回一个键值对的遍历器
  • keys():返回键名的遍历器
  • values():返回键值的遍历器
  • forEach():遍历每一个成员
var s = new Set();
s.add(1).add(2).add(2);//这里添加了两次2
alert(s.length); //2
s.has(1); //true
s.has(2); //true
s.has(3); //false

s.delete(2);
s.has(2); //false

WeakSet

WeakSet和Set有很多一样的地方,存的也是不同的值,但是他的成员必须是对象类型的值。

let ws = new WeakSet([{"car":"van"}])
console.log(ws)

同样,WeakSet数据结构也提供了add() delete() has()方法,作用域Set一样,但是要注意的是,WeakSet结构不能便利,所以没有keys() entries() values() forEach()方法

Map

Map对象类似于Object对象,但是键的范围不再限制于字符串,甚至对象也可当做键

var map = new Map();
var map2 = new Map([
    ["car","van"]
])
var o = {"car":"tractor"};
map.set(o,"content")
console.log(map.get(o))
console.log(map2.get("car"))

我们可以发现,在Map的构造函数中传入参数时,参数是一个二维数组,数组的每一个元素是一个键值对的数组,即car是键,van是键值,也可以使用set方法增加一个键值对,第一个参数是键名,第二个参数是键值。除了set方法,Map结构还有其他的方法

  • size:返回成员总数
  • set(key, value):设置一个键值对
  • get(key):读取一个键值
  • has(key):返回一个布尔值,表示某个键是否在结构中
  • delete(key):删除某个键
  • clear():清除所有成员
  • entries():返回实例的键值对遍历器
  • keys():返回实例所有键名的遍历器
  • values():返回实例所有键值的遍历器
  • forEach():遍历每一个键值对

WeakMap数据类型

WeakMap与Map相似,但是WeakMap结构的键名只支持引用类型的数据,像数组、对象、函数
其基本用法与Map相似,只是键名的类型有所限制,而且不支持遍历,也不支持clear()方法
WeakMap和WeakSet结构一样,其键名中的引用类型都是弱引用,随时会被垃圾回收机制回收,如果被回收,其实例中的键值对也会随着消失。