您的位置:

JavaScript中的new Map()

一、Map

Map是JavaScript中的一种可迭代的键值对容器,其中每个键和值可以是任何类型。在ES6中被提出,它可以用来存储和操作键值对数据。

const myMap = new Map();
myMap.set("key1", "value1");
myMap.set("key2", "value2");
myMap.set("key3", "value3");

上面代码创建了一个空的Map,然后使用set()方法添加了三个键值对。可以使用size属性获取其中的键值对数量。

console.log(myMap.size); // 3

二、Map的基本操作

1. set()

set()方法用于添加键值对到Map中。

myMap.set("key4", "value4");
console.log(myMap); // Map(4) {"key1" => "value1", "key2" => "value2", "key3" => "value3", "key4" => "value4"}

2. get()

get()方法用于获取指定键的值。

console.log(myMap.get("key2")); // "value2"

3. has()

has()方法用于检测Map中是否存在指定的键。

console.log(myMap.has("key5")); // false
console.log(myMap.has("key3")); // true

4. delete()

delete()方法用于删除Map中指定的键值对。

myMap.delete("key4");
console.log(myMap); // Map(3) {"key1" => "value1", "key2" => "value2", "key3" => "value3"}

5. clear()

clear()方法用于清空Map中的所有键值对。

myMap.clear();
console.log(myMap.size); // 0

三、Map的循环迭代

通过Map的entries()、keys()和values()方法,可以分别获取Map中所有键值对、所有键、所有值。

const myMap = new Map();
myMap.set("key1", "value1");
myMap.set("key2", "value2");
myMap.set("key3", "value3");

// 迭代所有键值对
for (let [key, value] of myMap.entries()) {
  console.log(`${key}: ${value}`);
}

// 迭代所有键
for (let key of myMap.keys()) {
  console.log(key);
}

// 迭代所有值
for (let value of myMap.values()) {
  console.log(value);
}

四、Map的应用

1. 缓存

Map可以用作缓存来提高代码的性能,避免多次计算同一个值。

const cache = new Map();

function fibonacci(num) {
  if (cache.has(num)) {
    return cache.get(num);
  }
  if (num <= 1) {
    return 1;
  }
  const result = fibonacci(num - 1) + fibonacci(num - 2);
  cache.set(num, result);
  return result;
}

上面代码是使用Map实现斐波那契数列函数节约计算次数的例子,可以看到,在每次调用函数时,先检查Map中是否保存了该数字对应的斐波那契数值,如果有,则直接返回该值,否则计算并保存在Map中。

2. 构造函数初始值

可以使用Map作为构造函数的初始值,简化代码。

const myMap = new Map([
    ["key1", "value1"],
    ["key2", "value2"],
    ["key3", "value3"]
]);

上面代码创建了一个含有三个键值对的Map,并将其作为构造函数的初始值。

3. 对象属性映射

Map可以像对象一样使用键值对存储属性和值,但键不仅限于字符串,可以是任何类型,也不限于使用点号。

const myObject = {};

myObject.prop1 = "value1";
myObject.prop2 = "value2";
myObject.prop3 = "value3";

console.log(myObject.prop1); // "value1"

const myMap = new Map();

myMap.set("prop1", "value1");
myMap.set("prop2", "value2");
myMap.set("prop3", "value3");

console.log(myMap.get("prop1")); // "value1"

上面代码比较了使用对象属性和Map的键值对分别存储属性和值的方式。

五、总结

JavaScript中的new Map()提供了一种可迭代的键值对容器,可以用来存储和操作键值对数据。Map可以进行添加、查询、检测、删除和清空操作,还可以循环迭代所有键值对、键和值等。Map可以应用于缓存、构造函数初始值、对象属性映射等方面,使代码更加简洁、优雅和高效。