JavaScript Map

Map 保存键值对,其中键可以是任何数据类型。

Map 会记住键的原始插入顺序。

Map 提供表示映射大小的属性。

Map 方法

|-----------|-----------------------------------------|
| 方法 | 描述 |
| new Map() | 创建新的 Map 对象。 |
| set() | 为 Map 中的键设置值。 |
| get() | 获取 Map 对象中键的值。 |
| clear() | 从 Map 中移除所有元素。 |
| delete() | 删除由某个键指定的 Map 元素。 |
| has() | 如果键存在于 Map 中,则返回 true。 |
| forEach() | 为 Map 中的每个键/值对调用回调函数。 |
| entries() | 返回迭代器对象,其中包含 Map 中的 [key, value] 键值对。 |
| keys() | 返回迭代器对象,其中包含 Map 中的键。 |
| values() | 返回迭代器对象,其中包含 Map 中的值。 |

|------|---------------|
| 属性 | 描述 |
| size | 返回 Map 元素的数量。 |

如何创建 Map

您可以通过以下方式创建 JavaScript 映射:

  • 将数组传递给 new Map()
  • 创建映射并使用 Map.set()

new Map()

您可以通过将数组传递给 new Map() 构造函数来创建 Map:

实例

<!DOCTYPE html>
<html>

<body>


    <p id="demo"></p>

    <script>
        const fruits=new Map([
            ["pick",200],
            ["blue",500]
        ])
        document.getElementById("demo").innerHTML = fruits.get("pick");
    </script>

</body>

</html>
<!-- 200 -->

Map.set()

例子 1

您也可以使用 set() 方法将元素添加到 Map 中:

<!DOCTYPE html>
<html>

<body>


    <p id="demo"></p>

    <script>
        const fruits = new Map();

        fruits.set("apples", 500);
        fruits.set("bananas", 300);
        fruits.set("oranges", 200);
        document.getElementById("demo").innerHTML = fruits.get("apples");
    </script>

</body>

</html>
<!-- 500 -->

例子 2

set() 方法还可用于更改现有的 Map 值:

<!DOCTYPE html>
<html>

<body>


    <p id="demo"></p>

    <script>
        const fruits = new Map([
            ["apples",400],
            ["bananas",400],
            ["oranger",700]
        ]);
        fruits.set("apples",400)
        document.getElementById("demo").innerHTML = fruits.get("apples");
    </script>

</body>

</html>
<!-- 400 -->

Map.get()

get() 方法获取 Map 中键的值:

实例

<!DOCTYPE html>
<html>

<body>


    <p id="demo"></p>

    <script>
        const fruits = new Map([
            ["apples",400],
            ["bananas",400],
            ["oranger",700]
        ]);
        document.getElementById("demo").innerHTML = fruits.get("apples");
    </script>

</body>

</html>
<!-- 400 -->

Map.size

size 属性返回 Map 中元素的数量:

实例

<!DOCTYPE html>
<html>

<body>
    <p id="demo"></p>

    <script>
        const fruits = new Map([
            ["apples",400],
            ["bananas",400],
            ["oranger",700]
        ]);
        document.getElementById("demo").innerHTML = fruits.size;
    </script>

</body>

</html>
<!-- 3 -->

Map.delete()

delete() 方法删除 Map 元素:

实例

<!DOCTYPE html>
<html>

<body>
    <p id="demo"></p>

    <script>
        const fruits = new Map([
            ["apples", 400],
            ["bananas", 400],
            ["oranger", 700]
        ]);
        fruits.delete("apples");

        document.getElementById("demo").innerHTML = fruits.size;
    </script>

</body>

</html>
<!-- 2 -->

Map.clear()

clear() 方法从 Map 中删除所有元素:

实例

<!DOCTYPE html>
<html>

<body>
    <p id="demo"></p>

    <script>
        const fruits = new Map([
            ["apples", 400],
            ["bananas", 400],
            ["oranger", 700]
        ]);
        fruits.clear();
        document.getElementById("demo").innerHTML = fruits.size;
    </script>

</body>

</html>
<!-- 0 -->

Map.has()

例子 1

如果 Map 中存在键,则 has() 方法返回 true:

<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        // 创建 Map
        const fruits = new Map([
            ["apples", 500],
            ["bananas", 300],
            ["oranges", 200]
        ]);

        document.getElementById("demo").innerHTML = fruits.has("apples");
    </script>

</body>

</html>
<!-- true -->

例子 2

请试试这个

<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        // 创建 Map
        const fruits = new Map([
            ["apples", 500],
            ["bananas", 300],
            ["oranges", 200]
        ]);

        // 删除元素
        fruits.delete("apples");

        document.getElementById("demo").innerHTML = fruits.has("apples");
    </script>

</body>

</html>

<!-- false -->

Map 是对象

例子 1

typeof 返回 object:

<!DOCTYPE html>
<html>

<body>
    <p id="demo"></p>

    <script>
        // 创建 Map
        const fruits = new Map([
            ["apples", 500],
            ["bananas", 300],
            ["oranges", 200]
        ]);

        document.getElementById("demo").innerHTML = typeof fruits;
    </script>

</body>

</html>

<!-- object -->

例子 2

instanceof Map 返回 true:

<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        // 创建 Map
        const fruits = new Map([
            ["apples", 500],
            ["bananas", 300],
            ["oranges", 200]
        ]);

        document.getElementById("demo").innerHTML = fruits instanceof Map;
    </script>

</body>

</html>

<!-- true -->

Map.forEach()

forEach() 方法为 Map 中的每个键/值对调用回调:

实例

JavaScript Object 对比 Map

JavaScript 对象与映射之间的差异:

|--------------|------------|
| Object(对象) | Map(映射) |
| 不可直接迭代 | 可直接迭代 |
| 无 size 属性 | 有 size 属性 |
| 键必须是字符串(或符号) | 键可以是任何数据类型 |
| 键不排序 | 键按插入排序 |
| 有默认键 | 没有默认键 |

<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        // 创建 Map
        const fruits = new Map([
            ["apples", 500],
            ["bananas", 300],
            ["oranges", 200]
        ]);
        let text = "";
        fruits.forEach(function (value, key) {
            text += key + '=' + value + "<br>"
        })
        document.getElementById("demo").innerHTML = fruits instanceof Map;
    </script>

</body>

</html>

<!-- true -->

Map.entries()

entries() 方法返回一个带有 Map 中 [key,values] 的迭代器对象:

实例

<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        // 创建 Map
        const fruits = new Map([
            ["apples", 500],
            ["bananas", 300],
            ["oranges", 200]
        ]);
        let text = "";
        for (const x of fruits.entries()) {
            text += x + "<br>"
        }
        document.getElementById("demo").innerHTML = text;
    </script>

</body>

</html>

<!-- 
apples,500
bananas,300
oranges,200
-->

Map.keys()

keys() 方法返回一个迭代器对象,其中包含 Map 中的键:

实例

<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        // 创建 Map
        const fruits = new Map([
            ["apples", 500],
            ["bananas", 300],
            ["oranges", 200]
        ]);
        let text = "";
        for (const x of fruits.keys()) {
            text += x + "<br>"
        }
        document.getElementById("demo").innerHTML = text;
    </script>

</body>

</html>

<!-- 
apples
bananas
oranges
-->

Map.values()

例子 1

values() 方法返回一个迭代器对象,其中包含 Map 中的值:

<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        // 创建 Map
        const fruits = new Map([
            ["apples", 500],
            ["bananas", 300],
            ["oranges", 200]
        ]);
        let text = "";
        for (const x of fruits.values()) {
            text += x + "<br>"
        }
        document.getElementById("demo").innerHTML = text;
    </script>

</body>

</html>

<!-- 
500
300
200
-->

例子 2

您可以使用 values() 方法对 Map 中的值求和:

<!DOCTYPE html>
<html>

<body>

    <p id="demo"></p>

    <script>
        // 创建 Map
        const fruits = new Map([
            ["apples", 500],
            ["bananas", 300],
            ["oranges", 200]
        ]);
        let total = 0;
        for (const x of fruits.values()) {
            total += x;
        }

        document.getElementById("demo").innerHTML = total;
    </script>

</body>

</html>

<!-- 
1000
-->

将对象用作键

例子 1

能够将对象用作键是 Map 的一项重要特性

<!DOCTYPE html>
<html>

<body>
    <p id="demo"></p>

    <script>
        // 创建对象
        const apples = { name: 'Apples' };
        const bananas = { name: 'Bananas' };
        const oranges = { name: 'Oranges' };

        // 创建 Map
        const fruits = new Map();

        // 将对象添加到 Map
        fruits.set(apples, 500);
        fruits.set(bananas, 300);
        fruits.set(oranges, 200);

        document.getElementById("demo").innerHTML = fruits.get(apples);
    </script>

</body>

</html>
<!-- 
1000
-->

例子 2

请记住:键是对象(apples),而不是字符串("apples"):

<!DOCTYPE html>
<html>

<p id="demo"></p>

<script>
// 创建对象
const apples = {name: 'Apples'};
const bananas = {name: 'Bananas'};
const oranges = {name: 'Oranges'};

// 创建 Map
const fruits = new Map();

// 向 Map 添加元素
fruits.set(apples, 500);
fruits.set(bananas, 300);
fruits.set(oranges, 200);

document.getElementById("demo").innerHTML = fruits.get("apples");
</script>

</body>
</html>


<!-- 
undefined
-->
相关推荐
夏天的味道٥2 小时前
使用 Java 执行 SQL 语句和存储过程
java·开发语言·sql
Fantasywt3 小时前
THREEJS 片元着色器实现更自然的呼吸灯效果
前端·javascript·着色器
IT、木易4 小时前
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。
开发语言·前端·javascript·ecmascript
冰糖码奇朵4 小时前
大数据表高效导入导出解决方案,mysql数据库LOAD DATA命令和INTO OUTFILE命令详解
java·数据库·sql·mysql
好教员好4 小时前
【Spring】整合【SpringMVC】
java·spring
Mr.NickJJ4 小时前
JavaScript系列06-深入理解 JavaScript 事件系统:从原生事件到 React 合成事件
开发语言·javascript·react.js
浪九天5 小时前
Java直通车系列13【Spring MVC】(Spring MVC常用注解)
java·后端·spring
堕落年代6 小时前
Maven匹配机制和仓库库设置
java·maven
功德+n6 小时前
Maven 使用指南:基础 + 进阶 + 高级用法
java·开发语言·maven
张拭心6 小时前
2024 总结,我的停滞与觉醒
android·前端