阅读 (1)

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:

实例

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

亲自试一试

Map.set()

例子 1

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

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

// 设置 Map 的值
fruits.set("apples", 500);
fruits.set("bananas", 300);
fruits.set("oranges", 200);

亲自试一试

例子 2

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

fruits.set("apples", 500);

亲自试一试

Map.get()

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

实例

fruits.get("apples");    // 返回 500

亲自试一试

Map.size

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

实例

fruits.size;

亲自试一试

Map.delete()

delete() 方法删除 Map 元素:

实例

fruits.delete("apples");

亲自试一试

Map.clear()

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

实例

fruits.clear();

亲自试一试

Map.has()

例子 1

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

fruits.has("apples");

亲自试一试

例子 2

请试试这个:

fruits.delete("apples");
fruits.has("apples");

亲自试一试

Map 是对象

例子 1

typeof 返回 object:

// 返回 object:

typeof fruits;

亲自试一试

例子 2

instanceof Map 返回 true:

// 返回 true:
fruits instanceof Map;

亲自试一试

JavaScript Object 对比 Map

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

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

Map.forEach()

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

实例

// 列出所有条目
let text = "";
fruits.forEach (function(value, key) {
  text += key + ' = ' + value;
})

亲自试一试

Map.entries()

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

实例

// 列出所有条目
let text = "";
for (const x of fruits.entries()) {
  text += x;
}

亲自试一试

Map.keys()

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

实例

// 列出所有键
let text = "";
for (const x of fruits.keys()) {
  text += x;
}

亲自试一试

Map.values()

例子 1

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

// 列出所有值
let text = "";
for (const x of fruits.values()) {
  text += x;
}

亲自试一试

例子 2

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

// 对所有值求和
let total = 0;
for (const x of fruits.values()) {
  total += x;
}

亲自试一试

将对象用作键

例子 1

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

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

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

// Add new Elements to the Map
fruits.set(apples, 500);
fruits.set(bananas, 300);
fruits.set(oranges, 200);

亲自试一试

例子 2

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

fruits.get("apples");  // 返回 undefined

亲自试一试

Browser Support

所有浏览器都支持 JavaScript 映射,除了 Internet Explorer :

ChromeEdgeFirefoxSafariOpera
支持支持支持支持支持