工作原理
Map是一种有序的键值对集合,其中每个键都是唯一的。它可以存储任何类型的值作为键或值,包括原始类型和对象引用。与普通的对象不同,Map保留了插入顺序,并且可以迭代访问其元素。
Map的工作原理是基于哈希表(Hash Table)的数据结构。当我们将键值对添加到Map中时,它会根据键的哈希值将其存储在内部的哈希表中。这使得在Map中查找键值对的速度非常快,无论存储了多少个键值对。
常见方法
以下是ES6 Map常见的方法:
set(key, value)
:向Map中添加一个键值对,如果键已经存在,则更新对应的值。get(key)
:根据键获取对应的值,如果键不存在,则返回undefined。has(key)
:检查Map中是否存在指定的键,返回一个布尔值。delete(key)
:根据键删除对应的键值对,如果删除成功,则返回true;如果键不存在,则返回false。clear()
:清空Map,移除所有的键值对。size
:获取Map中键值对的数量。
除了上述方法外,Map还提供了其他方法来遍历和操作键值对,例如keys()
、values()
和entries()
等。
示例
让我们通过一些示例来理解ES6 Map的使用。
示例1:添加和获取键值对
代码语言:javascript复制const map = new Map();
map.set('name', 'John');
map.set('age', 30);
map.set('isStudent', false);
console.log(map.get('name')); // 输出:John
console.log(map.get('age')); // 输出:30
console.log(map.get('isStudent')); // 输出:false
在上面的示例中,我们创建了一个空的Map对象,并使用set()
方法添加了三个键值对。然后,我们使用get()
方法获取键对应的值。
示例2:迭代Map
代码语言:javascript复制const map = new Map();
map.set('name', 'John');
map.set('age', 30);
map.set('isStudent', false);
// 迭代键
for (const key of map.keys()) {
console.log(key);
}
// 迭代值
for (const value of map.values()) {
console.log(value);
}
// 迭代键值对
for (const [key, value] of map.entries()) {
console.log(key, value);
}
在这个示例中,我们使用for...of
循环迭代Map的键、值和键值对。通过调用keys()
方法,我们可以获取所有的键;通过调用values()
方法,我们可以获取所有的值;通过调用entries()
方法,我们可以获取所有的键值对。
示例3:使用对象作为键
代码语言:javascript复制const user1 = { id: 1 };
const user2 = { id: 2 };
const map = new Map();
map.set(user1, 'John');
map.set(user2, 'Jane');
console.log(map.get(user1)); // 输出:John
console.log(map.get(user2)); // 输出:Jane
在这个示例中,我们创建了两个对象user1
和user2
,并将它们作为键添加到Map中。然后,我们使用对象作为键来获取对应的值。