ES6新增数据结构之--Map

130 阅读1分钟

1. Map对比数组的不同点

  1. 性能优化
  2. API
  3. 去重
  4. 双列key value

代码统一准备 const { log: l } = console;

2. Map的常用方法

  • 定义:对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者[基本类型]都可以作为一个键或一个值
2.1 创建

new Map(); 可以将键和值直接作为参数传入,也可以以嵌套数组的形式传入键值对的数组

let obj = { name: 'green' }; // 用对象作为键
let arr = [['a', 1], [obj, 2]]; // 即将作为参数的嵌套数组
let map = new Map(arr); // 创建Map对象
2.2 添加元素 Map.set()
map.set('b', 3);
map.set('b', 3);
map.set('b', 999); // 最后一次赋值会覆盖前面的值
map.set('e', 4);
l('map:',map); // {'a' => 1, {…} => 2, 'b' => 999, 'e' => 4}
2.3 判断元素是否存在Map.has()
l('是否有obj:',map.has(obj)); // 是否有obj: true
2.4 获取元素Map.get()
l('obj:',map.get(obj)); // obj: 2
2.5 获取Map对象的长度Map.size()
l('size:',map.size); // size: 4
2.6 删除元素Map.delete()
l('delete:',map.delete('e')); // delete: true
2.7 迭代输出Map对象,Map.keys(),Map.values(),map.entries()
let keys = map.keys()
l('keys:', keys);
let vals = map.values();
l('values:', vals);
let entries = map.entries();
l('entries:', entries)

以上代码输出:

image.png

2.8 for..of或者forEach遍历Map对象
for(let key of keys) {
  console.log('一个个的Key',key)
}
for(let val of vals) {
  console.log('一个个的val',val)
}
for(let et of entries) {
  console.log('一个个的实体',et)
}
map.forEach((val,key)=>{
  console.log(val,key,'xxx');
});

以上代码输出:

image.png

2.9 转化为数组Array.from()
let arr2 = Array.from(map);
console.log(arr2); 

以上代码打印的结果: image.png