ES6 中的 Map
是一种集合数据结构,与 Set
类似,但它是用来存储键值对的。Map
提供了更灵活的迭代和更广泛的键类型支持,与普通的对象相比,Map
的键可以是任何值,包括对象和函数。
以下是 Map
类型的一些关键特性和常用方法:
特性
- 键的多样性:
Map
的键可以是任何类型,不仅限于字符串或数字。 - 顺序性:
Map
保留了键值对的插入顺序。 - 唯一性:每个键在
Map
中都是唯一的。
创建 Map
- 使用
new Map()
构造函数创建一个空的Map
。 - 可以在创建时传入一个可迭代对象(其结构通常为
[键, 值]
的数组),来初始化Map
。
let myMap = new Map();
let myMapFromIterable = new Map([['key1', 'value1'], ['key2', 'value2']]);
常用方法
-
set(key, value):将一个键值对添加到
Map
对象中。myMap.set('key', 'value');
-
get(key):返回与给定键关联的值。
let value = myMap.get('key');
-
has(key):检查
Map
对象是否包含特定的键。let hasKey = myMap.has('key');
-
delete(key):从
Map
对象中移除指定的键值对。myMap.delete('key');
-
clear():移除
Map
对象中的所有键值对。myMap.clear();
-
size:返回
Map
对象中键值对的数量。let size = myMap.size;
-
keys():返回一个新的迭代器对象,该迭代器包含
Map
对象中的键。 -
values():返回一个新的迭代器对象,该迭代器包含
Map
对象中的值。 -
entries():返回一个新的迭代器对象,该迭代器包含
Map
对象中的键值对数组。 -
forEach(callbackFn, thisArg):对
Map
对象中的每个键值对执行给定函数。
myMap.forEach((value, key) => {console.log(`${key}: ${value}`);
});
转换为数组
- 可以使用
Array.from()
方法将Map
的键、值或键值对数组转换为数组。
let keysArray = Array.from(myMap.keys());
let valuesArray = Array.from(myMap.values());
let entriesArray = Array.from(myMap.entries());
示例
// 创建一个 Map 实例
let myMap = new Map();// 添加键值对
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');// 获取与键关联的值
console.log(myMap.get('key1')); // 输出: value1// 检查键是否存在
console.log(myMap.has('key1')); // 输出: true// 删除键值对
myMap.delete('key1');// 获取 Map 的大小
console.log(myMap.size); // 输出: 1// 清空 Map
myMap.clear();// 遍历 Map
myMap.set('key3', 'value3');
myMap.forEach((value, key) => {console.log(`${key}: ${value}`); // 输出: key3: value3
});// 转换为数组
let keys = Array.from(myMap.keys());
let values = Array.from(myMap.values());
let entries = Array.from(myMap.entries());
Map
是一种非常有用的数据结构,特别适合于需要快速查找、添加和删除键值对的场景。它提供了一种更灵活的方式来存储和管理键值对集合。