目录

JavaScript 对象映射

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

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

映射有一个表示映射大小的属性。

映射方法

方法 描述
new Map() 创建一个新的映射对象
set() 设置 Map 中键的值
get() 获取 Map 中某个键的值
clear() 从 Map 中删除所有元素
delete() 删除由键指定的 Map 元素
has() 如果 Map 中存在键则返回 true
forEach() 为 Map 中的每个键/值对调用回调
entries() 返回具有 Map 中的 [key, value] 对的迭代器对象
keys() 返回带有 Map 中的键的迭代器对象
values() 返回 Map 中值的迭代器对象
属性 描述
size 返回 Map 元素的数量

如何创建映射

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

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

新映射()

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

示例

// Create a Map
const fruits = new Map([
  ["apples", 500],
  ["bananas", 300],
  ["oranges", 200]
]);
亲自试一试 »

映射.set()

您可以使用以下命令将元素添加到映射中set()方法:

示例

// Create a Map
const fruits = new Map();

// Set Map Values
fruits.set("apples", 500);
fruits.set("bananas", 300);
fruits.set("oranges", 200);
亲自试一试 »

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

示例

fruits.set("apples", 500);
亲自试一试 »

映射.get()

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

示例

fruits.get("apples");    // Returns 500
亲自试一试 »


映射大小

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

示例

fruits.size;
亲自试一试 »

映射.删除()

这个delete()方法删除 Map 元素:

示例

fruits.delete("apples");
亲自试一试 »

映射.clear()

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

示例

fruits.clear();
亲自试一试 »

映射.has()

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

示例

fruits.has("apples");
亲自试一试 »

尝试这个:

fruits.delete("apples");
fruits.has("apples");
亲自试一试 »

映射是对象

typeof返回对象:

示例

// Returns object:
typeof fruits;
亲自试一试 »

instanceof映射返回 true:

示例

// Returns true:
fruits instanceof Map;
亲自试一试 »

JavaScript 对象与映射

JavaScript 对象和映射之间的区别:

对象 映射
不可直接迭代 直接可迭代
没有尺寸属性 拥有大小属性
键必须是字符串(或符号) 键可以是任何数据类型
按键顺序不正确 键按插入顺序排列
有默认键 没有默认键

Map.forEach()

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

示例

// List all entries
let text = "";
fruits.forEach (function(value, key) {
  text += key + ' = ' + value;
})
亲自试一试 »

映射.entries()

这个entries()方法返回一个迭代器对象,其中包含 Map 中的 [key,values]:

示例

// List all entries
let text = "";
for (const x of fruits.entries()) {
  text += x;
}
亲自试一试 »

映射.keys()

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

示例

// List all keys
let text = "";
for (const x of fruits.keys()) {
  text += x;
}
亲自试一试 »

Map.values()

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

示例

// List all values
let text = "";
for (const x of fruits.values()) {
  text += x;
}
亲自试一试 »

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

示例

// Sum all values
let total = 0;
for (const x of fruits.values()) {
  total += x;
}
亲自试一试 »

对象作为键

能够使用对象作为键是一个重要的 Map 功能。

示例

// Create Objects
const apples = {name: 'Apples'};
const bananas = {name: 'Bananas'};
const oranges = {name: 'Oranges'};

// Create a Map
const fruits = new Map();

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

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

示例

fruits.get("apples");  // Returns undefined
亲自试一试 »

浏览器支持

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

Chrome Edge Firefox Safari Opera