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 是一种非常有用的数据结构,特别适合于需要快速查找、添加和删除键值对的场景。它提供了一种更灵活的方式来存储和管理键值对集合。