【es6】Set 和 Map

set

简介
  1. set类似于数组,但成员值都是唯一的
  2. set函数可接受数组作为参数,不会添加重复值
    const items = new Set([1, 2, 3, 4, 5, 5, 5, 5, 6]);
    items //1,2,3,4,5,6
  1. 去除数组的重复成员
    […new Set(array)]
  2. Set中加入值时不会发生类型转换 (5和”5”不同)
    Set内部判断两个值是否相等类似于(===)但NaN等于自身,(===)中认为NaN不等于自身
    两个对象总是不相等的,两个空对象会被认作两个值
  3. Set 结构没有键名,只有键值
Set实例的属性和方法
  1. 属性
    Set.prototype.constructor:构造函数,默认就是Set函数。
    Set.prototype.size:返回Set实例的成员总数。
  2. 方法
    add(value):添加某个值,返回Set结构本身。
    delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
    has(value):返回一个布尔值,表示该值是否为Set的成员。
    clear():清除所有成员,没有返回值。
  3. 判断是否包含一个键
    对象:
    if (properties[someName]) {
      // do something
    }

set:

    if (properties.has(someName)) {
      // do something
    }
  1. Array.from可以将Set结构转为数组(可去除数组重复成员)
遍历操作
  1. 方法
    • keys():返回键名的遍历器
    • values():返回键值的遍历器
    • entries():返回键值对的遍历器
    • forEach():使用回调函数遍历每个成员,没有返回值
  2. 没有键名,只有键值,keys()与values()返回值相同,可直接循环
    let set = new Set(['red', 'green', 'blue']);
    for (let x of set) {
      console.log(x);
    }
应用
  1. 与扩展运算符和filter结合,实现并集,交集,差集
  2. 在遍历操作中直接改变set结构
// 方法一
    let set = new Set([1, 2, 3]);
    set = new Set([...set].map(val => val * 2));
    // set的值是2, 4, 6

// 方法二
    let set = new Set([1, 2, 3]);
    set = new Set(Array.from(set, val => val * 2));
    // set的值是2, 4, 6

WeakSet

  1. 类似Set ,不重复的值的集合
  2. 但是WeakSet 的成员只能是对象
  3. WeakSet中的对象都是弱引用,适合临时存放对象
  4. 内部对象数量不可预测,所以WeakSet不可遍历
  5. 方法
    • WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。
    • WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。
    • WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在 WeakSet 实例之中。

Map

简介
  1. 也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键
  2. 同一键值多次赋值,后者覆盖前者
  3. Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键
方法
  1. 方法&属性
    • set() 添加成员,map.set(key, value)
    • get() 读取成员,读取未知的键,返回undefined
    • has() 是否含有某成员
    • delete() 删除成员
    • size属性 返回成员总数
    • clear() 清除所有成员
遍历
keys(),values(),entries(),forEach()

1. Map 的遍历顺序就是插入顺序
2. 可使用扩展运算符转换为数组
3. Map 本身没有map和filter方法,可以结合数组的map方法实现

与其他数据类型相互转换

其他

  1. 垃圾回收机制
  2. 内存泄漏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值