ES6 中的利器:Map 对象的技术使用方法

在ES6中,Map 对象是一种新的数据结构,它可以存储键值对,并能够高效地进行增、删、改、查等操作。在前端开发中,Map 对象为我们提供了一种更加灵活和高效的数据存储与处理方式。

Map 对象的基本用法

Map 对象的基本用法和普通的对象一样,我们可以使用new关键字来创建一个 Map 对象,如下所示:

let myMap = new Map();

Map 对象也支持传入可迭代的对象作为参数来初始化,如下所示:

let myMap = new Map([
    ["name", "Tom"],
    ["age", 20],
    ["gender", "male"]
]);

这里我们使用了一个二维数组来表示键值对的集合,数组的每一项分别表示键和值。

Map 对象的 set() 方法可以用来添加键值对,如下所示:

let myMap = new Map();

myMap.set("name", "Tom");
myMap.set("age", 20);
myMap.set("gender", "male");

Map 对象的 get() 方法可以用来获取指定键的值,如下所示:

let myMap = new Map([
    ["name", "Tom"],
    ["age", 20],
    ["gender", "male"]
]);

let name = myMap.get("name"); // "Tom"
let age = myMap.get("age"); // 20
let gender = myMap.get("gender"); // "male"

Map 对象的 has() 方法可以用来判断指定键是否存在,如下所示:

let myMap = new Map([
    ["name", "Tom"],
    ["age", 20],
    ["gender", "male"]
]);

let hasName = myMap.has("name"); // true
let hasEmail = myMap.has("email"); // false

Map 对象的 delete() 方法可以用来删除指定键,如下所示:

let myMap = new Map([
    ["name", "Tom"],
    ["age", 20],
    ["gender", "male"]
]);

myMap.delete("name");
let hasName = myMap.has("name"); // false

除了上述基本操作外,Map 对象还支持多种其他高级操作,如遍历、获取长度等等。

Map 对象的高级用法

遍历

Map 对象支持 for...of 循环来遍历键值对,如下所示:

let myMap = new Map([
    ["name", "Tom"],
    ["age", 20],
    ["gender", "male"]
]);

for(let [key, value] of myMap) {
    console.log(`${key} = ${value}`);
}

输出结果如下:

Map 对象还提供了 keys()、values() 和 entries() 方法,它们分别可以用来获取键的集合、值的集合和键值对的集合,如下所示:

let myMap = new Map([
    ["name", "Tom"],
    ["age", 20],
    ["gender", "male"]
]);

let keys = myMap.keys(); // 返回键的集合
let values = myMap.values(); // 返回值的集合
let entries = myMap.entries(); // 返回键值对的集合

设置默认值

Map 对象的 get() 方法在获取不存在的键时会返回 undefined,我们可以使用 setDefault() 方法来设置默认值,如下所示:

let myMap = new Map();

myMap.setDefault("name", "Tom");
myMap.setDefault("age", 20);
myMap.setDefault("gender", "male");

let name = myMap.get("name"); // "Tom"
let email = myMap.get("email"); // 默认返回 undefined

WeakMap 对象

Map 对象的一项功能就是存储键值对,但是当某个键不再被引用时,对应的值也不会自动释放。这时候我们可以使用 WeakMap 对象来解决问题,WeakMap 对象的键是弱引用的,当某个键不再被引用时,它对应的值也会被自动释放。

使用方法与 Map 对象基本一致,只是需要使用 WeakMap 替换 Map,示例如下:

let myWeakMap = new WeakMap();

let obj1 = { name: "Tom" };
let obj2 = { age: 20 };
let obj3 = { gender: "male" };

myWeakMap.set(obj1, "Tom");
myWeakMap.set(obj2, 20);
myWeakMap.set(obj3, "male");

总结

Map 对象是 ES6 中的一种新型数据结构,它支持存储键值对,并且提供了高效的增、删、改、查等操作。Map 对象的高级用法包括遍历、设置默认值和使用 WeakMap 对象。在实际前端开发中,Map 对象为我们提供了一种更加灵活和高效的数据存储与处理方式。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a4cadcadd4f0e0ffd2114f


纠错反馈