ECMAScript6 入门 Set 和Map结构

Set 和 Map 数据结构

1:Set本身是一个构造函数,用来生成 Set 数据结构
(它类似于数组,但是成员的值都是唯一的,没有重复的值)

(所以可以用它来对数组去重)[...new Set(array)]
(去除字符串里面的重复字符)[...new Set('ababbc')].join('')

Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化

向Set加入值的话,不会发生类型转换,并且他的判断原理和 Object.is() 的判断规则是一样

 

2:Set 实例的属性和方法 

属性
{
    Set.prototype.constructor:构造函数,默认就是Set函数。
    Set.prototype.size:返回Set实例的成员总数。
}

方法
{
    Set.prototype.add(value):添加某个值,返回 Set 结构本身。
    Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
    Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
    Set.prototype.clear():清除所有成员,没有返回值。
}

遍历
{
    Set.prototype.keys():返回键名的遍历器
    Set.prototype.values():返回键值的遍历器
    Set.prototype.entries():返回键值对的遍历器
    Set.prototype.forEach():使用回调函数遍历每个成员
}

 

3:Array.from方法可以将 Set 结构转为数组
(所以这又是一种对数组去重的方法)

function dedupe(array) {
  return Array.from(new Set(array));
}

dedupe([1, 1, 2, 3]) // [1, 2, 3]

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

WeakSet

 

1:WeakSet 结构与 Set 类似,也是不重复的值的集合

和Set的差别
{
    1:WeakSet 的成员只能是对象,而不能是其他类型的值
    2:WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用
}

相同点
{
    和Set接受的参数一样:可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数
}

 

2:语法使用
const a = [[1, 2], [3, 4]];
const ws = new WeakSet(a);
// WeakSet {[1, 2], [3, 4]}

方法
{
    WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。
    WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。
    WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在 WeakSet 实例之中
}

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Map

(传统的JavaScript对象,只能采用字符串当做key),而Map突破这个限制,各种类型的值(包括对象)都可以当作键

属性
{
    1:size属性返回 Map 结构的成员总数
    2:Map.prototype.set(key, value) 更新键值,如果不存在就相当于新增
    3:Map.prototype.get(key) 获取相应的键值
    4:Map.prototype.has(key) 返回该键是否存在
    5:Map.prototype.delete(key) 删除某个键
    6:Map.prototype.clear() 清除所有值
}

 

待续....

posted @ 2019-10-10 10:51  初心不负  阅读(202)  评论(0编辑  收藏  举报