相关推荐recommended
JavaScript中解锁Map和Set的力量
作者:mmseoamin日期:2024-02-06

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》

JavaScript中解锁Map和Set的力量,第1张​ 

JavaScript中解锁Map和Set的力量,第2张

✨ 前言

        ES6带来了Map和Set两个新的数据结构 - 它们分别用于存放键值对和唯一值。Map和Set提供了更优雅和高效的存取与操作数据的方式。本文将全面解析Map和Set的用法及应用场景,助你提升JavaScript数据处理能力。

JavaScript中解锁Map和Set的力量,第3张

第一节:Map概述

Map是ES6新增的一种键值对集合,类似于Object。区别在于:

  • Map的键可以是任意类型,Object的键只能是字符串或符号。
  • Map的大小可以直接获取,Object则需手动计算。
  • Map有更多方便的方法,如size、clear等。

    Map提供了对键值对的存储与操作,键的顺序也得到保留。

    第二节:创建和初始化Map

    可以通过构造函数创建Map:

    let map = new Map();

    Map可以接受数组做为参数,进行初始化:

    new Map([
      ['key1', 'val1'],
      ['key2', 'val2'], 
    ]);

     也可以链式调用set方法初始化:

    new Map()
      .set('a', 1)
      .set('b', 2);

    第三节:Map的基本操作

    • set(key, val) 添加元素
    • get(key) 通过键查找值
    • has(key) 判断键是否存在
    • delete(key) 通过键删除元素
    • clear() 清空所有元素

      Map使键值对的操作更简洁直观。后面将介绍Map的遍历等高级用法。

       

      第四节:遍历Map

      常用的Map遍历方式:

      • keys() - 遍历键名
      • values() - 遍历键值
      • entries() - 遍历键值对
      • forEach() - 遍历回调函数

        示例:

        let map = new Map([[1, 'a'], [2, 'b']]);
        for (let key of map.keys()) {
          // ...
        }
        for (let value of map.values()) {
          // ...
        }
        for (let [key, value] of map.entries()) {
          // ...
        }
        map.forEach(function(value, key) {
          // ...
        })

        第五节:WeakMap

        WeakMap与Map的区别:

        • WeakMap只接受对象作为键名
        • WeakMap的键名所指向的对象不计入GC ROOT
        • WeakMap不可遍历

          WeakMap使用场景:

          • 作为对象的元数据储存
          • 缓存数据

            第六节:Set的概述

            Set是一种包含唯一值的集合,可以高效地对值进行操作。

            Set具有以下特点:

            • 成员值唯一,没有重复值
            • 值的顺序不重要,也不能索引
            • 支持高效的查找、删除操作

              第七节:创建和初始化Set

              可以通过构造函数创建Set:

              let set = new Set();

              也可以传入数组或者iterable对象进行初始化: 

              new Set([1, 2, 3]);
              new Set('hello');

              第八节:Set的基本操作

              • add(value) 添加元素
              • delete(value) 删除元素
              • has(value) 检查是否存在
              • clear() 清空所有元素

                Set使得处理唯一值更简单。

                第九节:遍历Set

                • keys() 返回键名的迭代器
                • values() 返回键值的迭代器
                • entries() 返回键值对的迭代器
                • forEach() 遍历回调函数

                  示例:

                   

                  let set = new Set([1, 2]);
                  for (let key of set.keys()) {
                    // ...
                  }
                  for (let value of set.values()) {
                    // ... 
                  }
                  set.forEach(function(value) {
                    // ...
                  })

                  第十节:WeakSet

                  WeakSet与Set的区别:

                  • 只接受对象作为成员
                  • 对象不计入垃圾回收机制中
                  • 不可遍历

                    使用场景:存储DOM节点,不会泄漏内存。

                    Map和Set大大提高了数据处理能力,了解其用法可以使代码更简洁优雅。

                     

                    第十一节:Map的应用

                    • 作为对象的替代,当键需要非字符串时
                      const map = new Map();
                      map.set(obj, value);
                      • 存储键值对数据集合
                      • 映射关系表
                      • 频率表记录出现次数
                      • 缓存数据

                        第十二节:Set的应用

                        • 去重数组
                          const set = new Set(arr);
                          • 交集、并集、差集运算
                          • 删除数组重复值
                            [...new Set(arr)]
                            • 测试值是否存在于某集合
                            • 存储不重复数据,如Tags

                              Map和Set拓展了数据处理能力,在数据操作方面有很多实际应用,值得我们深入学习。

                              ✨ 结语

                              • Map用于存储键值对,键可以是任意类型。
                              • Set用于存储唯一值,没有重复值。
                              • Map和Set都可以高效地增删查找。
                              • Map支持按插入顺序遍历,Set不保证顺序。
                              • WeakMap和WeakSet用于存储对对象的弱引用。
                              • Map和Set在处理数据时有许多应用场景。

                                要点: