ES6的Map结构

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注