美文网首页日常刻书
ES6 中新增的 Set 集合和 Map 集合

ES6 中新增的 Set 集合和 Map 集合

作者: F_wind | 来源:发表于2021-01-26 11:11 被阅读0次

    《深入理解ES6》阅读随笔

    在原来 ES5 中没有 Set 和 Map 时,可以通过数组来模拟实现,但是会存在一些问题:

    1. 数组对象的值或者键只能用字符串来表示,如果使用数字或者对象等其他类型来定义时,会进行强制类型转换;
    2. 在判断值或者键是否存在时,存在歧义,比如值为 0 时,那么其布尔值就为 false,但其实该值是存在的。
      为了解决数组创建集合所带来的各种问题,在 ES6 中正式新增了 Set 集合和 Map 集合的概念。

    Set 集合

    基本属性:Set 集合是一个有序无重复的集合,有以下基本功能:

    // 声明
    let animals = new Set(['cat'])
    // 判断是否存在
    console.log(animals.has('cat')) // true
    // 数量
    console.log(animals.size) // 1
    // 新增
    animals.add('dog')
    console.log(animals) // Set { 'cat', 'dog' }
    // 删除
    animals.delete('cat')
    console.log(animals) // Set { 'dog' }
    // 清空
    animals.clear()
    console.log(animals) // Set {}
    

    在创建 Set 集合时,可以自动去重:

    // 声明
    let animals = new Set([1, 2, 3, 3, 3]);
    console.log(animals.size); // 3
    console.log(animals); // Set {1,2,3}
    

    forEach:Set 在使用 forEach 时与数组类似,但是第一参数与第二参数为了与其他 forEach 保持统一,均为 value :

    // 声明
    let animals = new Set(['cat']);
    
    animals.forEach((value, key, arr) => {
      console.log(value, key); // cat cat
      console.log(arr); // Set { 'cat' }
    });
    

    Weak Set
    在使用对象作为 Set 的值时,当作为值的对象被销毁时,并不会自动销毁 Set 中的对象值,这回导致额外的内存驻留,甚至溢出。此时可以使用 Weak Set 来声明,当作为值的对象被销毁时,在 Weak Set 中的对象也会被自动回收。

    Map 集合

    基本用法:与 Set 类似,除了键还有了值的概念;

    // 声明
    let animals = new Map([['cat','Tom']])
    // 判断是否存在
    console.log(animals.has('cat')) // true
    // 数量
    console.log(animals.size) // 1
    // 新增
    animals.set('dog','Wangcai')
    console.log(animals) // Map { 'cat', 'dog' }
    // 删除
    animals.delete('cat')
    console.log(animals) // Map { 'dog' }
    // 清空
    animals.clear()
    console.log(animals) // Map {}
    

    Map 中也有 forEach 和 Weak Map 的概念,与 Set 类似,这里就不赘述了。

    相关文章

      网友评论

        本文标题:ES6 中新增的 Set 集合和 Map 集合

        本文链接:https://www.haomeiwen.com/subject/unhgzktx.html