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