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