美文网首页
深入理解ES6:7.Set 集合与 Map 集合

深入理解ES6:7.Set 集合与 Map 集合

作者: 独木舟的木 | 来源:发表于2019-11-28 09:56 被阅读0次

    ECMAScript 6 中的 Set 集合

    • Set 集合是一种无重复元素的列表。
    • Set 集合中的 +0 和 -0 被认为是相等的。

    创建 Set 集合并添加元素

    // 创建 Set 集合
    let set = new Set();
    
    // 用数组来初始化 Set 集合
    let set = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
    console.log(set.size); // 5
    
    // 添加元素
    set.add(5);
    set.add('5');
    
    // 获取集合元素数量
    console.log(set.size); // 2
    
    // 检测 Set 集合中是否存在某个值
    console.log(set.has(5)); // true
    

    移除元素

    • delete() 方法:移除 Set 集合中的某一个元素。
    • clear() 方法:移除集合中的所有元素。

    Set 集合的 forEach 方法

    Set 集合的 forEach 方法的三个参数:

    • 参数一:Set 集合下一次索引的位置。
    • 参数二:同参数一!!!!
    • 被遍历的 Set 集合本身。
    set.forEach(function(value, key, ownerSet) {
      console.log(key + ' ' + value);
      console.log(ownerSet === set);
    });
    
    /*
    1 1
    true
    2 2
    true
    */
    

    将 Set 集合转换为数组

    let set = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
    
    // 通过展开运算符将 Set 集合转换为数组
    let array = [...set];
    
    console.log(array); // [ 1, 2, 3, 4, 5 ]
    

    Weak Set 集合

    Weak Set 集合只存储对象的弱引用,并且不可以存储原始值;集合中的弱引用如果是对象唯一的引用,则会被回收并释放相应内存。

    let set = new WeakSet(),
      key = {};
    
    // Set.add():向集合中添加对象
    set.add(key);
    
    // Set.has():检查集合中是否存在指定对象的引用
    console.log(set.has(key)); // true
    
    // Set.delete():向集合中删除一个元素
    set.delete(key);
    
    console.log(set.has(key)); // false
    

    如果你只需要跟踪对象引用,你更应该使用 Weak Set 集合而不是普通的 Set 集合。

    ECMAScript 6 中的 Map 集合

    Map 集合内含有多组键值对,集合中每个元素分别存放着可访问的键名和它对应的值。

    在 Map 集合中,可以将对象名作为键名。

    let map = new Map();
    
    // 向 Map 集合中添加新的元素
    map.set('key', 'value');
    
    // 从 Map 集合中获取信息
    console.log(map.get('key')); // value
    

    Map 集合支持的方法

    • has(key):检测指定的键名在 Map 集合中是否已经存在。
    • delete(key):从 Map 集合中移除指定键名及其对应的值。
    • clear():移除 Map 集合中的所有键值对。

    Map 集合的初始化方法

    可以向 Map 构造函数传入数组来初始化一个 Map 集合。

    let map = new Map([
      ['name', 'Nicholas'],
      ['age', 25]
    ]);
    
    console.log(map.has('name')); // true
    console.log(map.get('name')); // Nicholas
    console.log(map.has('age')); // true
    console.log(map.get('age')); // 25
    console.log(map.size); // 2
    

    Map 集合的 forEach() 方法

    let map = new Map([
      ['name', 'Nicholas'],
      ['age', 25]
    ]);
    
    map.forEach(function(value, key, ownerMap) {
      console.log(key + ' ' + value);
      console.log(ownerMap === map);
    });
    
    /* 
    name Nicholas
    true
    age 25
    true
    */
    

    Weak Map 集合

    • Weak Map 是弱引用 Map 集合,用于存储对象的弱引用。
    • Weak Map 集合中的键名必须是一个对象。
    • Weak Map 集合中的键值对,只有键名会遵从垃圾回收机制,如果值是一个对象,则保存的是对象的强引用,不会触发垃圾回收机制。
    • Weak Map 集合最大的用途是保存 Web 页面中的 DOM 元素。

    相关文章

      网友评论

          本文标题:深入理解ES6:7.Set 集合与 Map 集合

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