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可以应用于缓存、构造函数初始值、对象属性映射等方面,使代码更加简洁、优雅和高效。

原创文章,作者:SRRZL,如若转载,请注明出处:https://www.506064.com/n/334160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
SRRZLSRRZL
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相关推荐

  • Python中new和init的区别

    new和init都是Python中常用的魔法方法,它们分别负责对象的创建和初始化,本文将从多个角度详细阐述它们的区别。 一、创建对象 new方法是用来创建一个对象的,它是一个类级别…

    编程 2025-04-29
  • 使用JavaScript日期函数掌握时间

    在本文中,我们将深入探讨JavaScript日期函数,并且从多个视角介绍其应用方法和重要性。 一、日期的基本表示与获取 在JavaScript中,使用Date对象来表示日期和时间,…

    编程 2025-04-28
  • JavaScript中使用new Date转换为YYYYMMDD格式

    在JavaScript中,我们通常会使用Date对象来表示日期和时间。当我们需要在网站上显示日期时,很多情况下需要将Date对象转换成YYYYMMDD格式的字符串。下面我们来详细了…

    编程 2025-04-27
  • 如何使用return new crontrigger(cron).nextexecutiontime(triggercontext)实现定时调度

    如果你正在寻找一种可靠且简单的方式来实现定时调度,那么你可能需要了解return new crontrigger(cron).nextexecutiontime(triggerco…

    编程 2025-04-27
  • JavaScript中修改style属性的方法和技巧

    一、基本概念和方法 style属性是JavaScript中一个非常重要的属性,它可以用来控制HTML元素的样式,包括颜色、大小、字体等等。这里介绍一些常用的方法: 1、通过Java…

    编程 2025-04-25
  • CloneDeep函数在Javascript开发中的应用

    一、CloneDeep的概念 CloneDeep函数在Javascript中是一种深层克隆对象的方法,可以在拷贝对象时避免出现引用关系。使用者可以在函数中设置可选参数使其满足多种拷…

    编程 2025-04-25
  • JavaScript中的Object.getOwnPropertyDescriptors()

    一、简介 Object.getOwnPropertyDescriptors()是JavaScript中一个非常有用的工具。简单来说,这个方法可以获取一个对象上所有自有属性的属性描述…

    编程 2025-04-25
  • JavaScript保留整数的完整指南

    JavaScript是一种通用脚本语言,非常适合Web应用程序开发。在处理数字时,JavaScript可以处理整数和浮点数。在本文中,我们将重点关注JavaScript如何保留整数…

    编程 2025-04-25
  • JavaScript点击事件全方位指南

    一、click事件基础 click事件是最常用的鼠标事件之一,当元素被单击时触发。click事件适用于大多数HTML元素(<a>、<button>)和SVG…

    编程 2025-04-25
  • 详解JavaScript onclick事件

    一、onclick的基础知识 onclick事件是JavaScript中最常用的事件之一,它在用户点击某个HTML元素时触发。通常我们可以通过给元素添加一个onclick属性来绑定…

    编程 2025-04-25

发表回复

登录后才能评论