1、Map概念
Map
是一种集合数据结构,它存储键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。
2、创建一个Map
你可以通过 new Map()
构造函数来创建一个空的 Map
。
const myMap = new Map();
你也可以在创建时直接初始化 Map
,通过传递一个可迭代对象,其中每个元素都是一个包含两个元素的数组,第一个元素是键,第二个元素是值。
const myMap = new Map([[1, 'one'],[2, 'two'],[3, 'three']
]);
Map的方法和属性
set(key, value)
:在Map
中设置键值对。get(key)
:返回键对应的值,如果不存在则返回undefined
。has(key)
:返回一个布尔值,表示Map
中是否包含指定的键。delete(key)
:从Map
中移除指定的键值对,如果键存在并成功移除,返回true
,否则返回false
。clear()
:移除Map
中所有的键值对。size
:返回Map
中键值对的数量。
const myMap = new Map();// 设置键值对
myMap.set('a', 1);
myMap.set('b', 2);
myMap.set('c', 3);// 获取值
console.log(myMap.get('a')); // 输出: 1// 检查键是否存在
console.log(myMap.has('a')); // 输出: true// 删除键值对
myMap.delete('a');
console.log(myMap.has('a')); // 输出: false// 获取Map的大小
console.log(myMap.size); // 输出: 2// 遍历Map
myMap.forEach((value, key) => {console.log(`${key}:${value}`);
});// 清空Map
myMap.clear();
console.log(myMap.size); // 输出: 0
Map的迭代
Map
对象原型上暴露了几个迭代器方法,用于遍历Map中的键值对:
keys()
:返回一个新的迭代器对象,它按插入顺序包含了Map对象中每个元素的键。values()
:返回一个新的迭代器对象,它按插入顺序包含了Map对象中每个元素的值。entries()
:返回一个新的迭代器对象,它按插入顺序包含了Map对象中每个元素的键值对数组。
例如:
for (let [key, value] of myMap.entries()) {console.log(key, value);
}
// 等同于
for (let [key, value] of myMap) {console.log(key, value);
}
Map
对象在JavaScript中是非常有用的,特别是在需要保持键值对的插入顺序时。与普通对象相比,Map
允许任何类型的键,并且可以很容易地迭代其元素。
3、Map
重要的函数(也称为方法
基本操作函数
-
Map.prototype.set(key, value)
:设置Map
中键key
的值为value
,并返回该Map
对象。 -
Map.prototype.get(key)
:返回Map
中与指定键key
相关联的值,如果找不到键则返回undefined
。 -
Map.prototype.has(key)
:返回一个布尔值,表示Map
中是否包含指定的键key
。 -
Map.prototype.delete(key)
:从Map
中删除指定的键key
及其对应的值,如果删除成功则返回true
,否则返回false
。 -
Map.prototype.clear()
:移除Map
对象中所有的键值对。
遍历函数
-
Map.prototype.keys()
:返回一个新的迭代器对象,它按插入顺序包含了Map
对象中每个元素的键。 -
Map.prototype.values()
:返回一个新的迭代器对象,它按插入顺序包含了Map
对象中每个元素的值。 -
Map.prototype.entries()
:返回一个新的迭代器对象,它按插入顺序包含了Map
对象中每个元素的键值对数组。 -
Map.prototype.forEach(callbackFn[, thisArg])
:按照插入顺序,为Map
对象里的每一键值对调用一次callbackFn
函数。如果提供了thisArg
,它将作为callbackFn
函数的this
值。
示例
以下是如何使用这些函数的示例:
const myMap = new Map();// 设置键值对
myMap.set('a', 1);
myMap.set('b', 2);
myMap.set('c', 3);// 获取值
console.log(myMap.get('a')); // 输出: 1// 检查键是否存在
console.log(myMap.has('a')); // 输出: true// 删除键值对
console.log(myMap.delete('a')); // 输出: true// 遍历键
for (const key of myMap.keys()) {console.log(key);
}// 遍历值
for (const value of myMap.values()) {console.log(value);
}// 遍历键值对
for (const [key, value] of myMap.entries()) {console.log(key, value);
}// 使用forEach遍历
myMap.forEach((value, key) => {console.log(key, value);
});// 清空Map
myMap.clear();
这些函数是Map
对象的核心,使得Map
成为处理键值对数据的一个非常强大和灵活的数据结构。