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
。