Object 结构提供了“字符串—值”的对应
Map 结构提供了“值—值”的对应,各种类型的值(包括对象)都可以当作键
都是“键值对”的数据结构
Map 结构的语法
set(key, value) set方法设置键名key对应的键值为value,然后返回整个 Map 结构;
get(key) get方法读取这个键,返回value,没有则返回undefined;
delete(key) delete方法删除了某个键,成功返回true,失败false;
has(key) has方法返回布尔值;
size 属性返回 Map 结构的成员总数;
clear() 清除所有成员,不返回
const m = new Map();
const o = {p: 'Hello World'};
m.set(o, 'content')
m.get(o) // "content"
m.has(o) // true
map.size // 1
m.delete(o) // true
m.has(o) // false
作为构造函数,Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
const map = new Map([
['name', '张三'],
['title', 'Author']
]);
map.size // 2
map.has('name') // true
map.get('name') // "张三"
Map 结构原生提供三个遍历器生成函数和一个遍历方法。
keys():返回键名的遍历器。values():返回键值的遍历器。entries():返回所有成员的遍历器。forEach():遍历 Map 的所有成员。
for (let key of map.keys()) {
console.log(key);
}
for (let value of map.values()) {
console.log(value);
}
for (let item of map.entries()) {
console.log(item[0], item[1]);
}
// 或者
for (let [key, value] of map.entries()) {
console.log(key, value);
}
// 等同于使用map.entries()
for (let [key, value] of map) {
console.log(key, value);
}
Map 结构转为数组结构
[...map]
Map的forEach方法还可以接受第二个参数,用来绑定this。
const reporter = {
report: function(key, value) {
console.log("Key: %s, Value: %s", key, value);
}
};
map.forEach(function(value, key, map) {
this.report(key, value);
}, reporter);
上面代码中,forEach方法的回调函数的this,就指向reporter。
