ES6的Map
Map结构提供了“值—值”的对应,如果需要键值对的数据结构,Map比Object更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键,灵活性比较高。
let map = new Map();
let obj = {p: "Hello World"};
//新增
map.set(obj, "content")
m.get(obj) // "content"
//验证和删除操作
map.has(obj) // true
map.size(obj) // 1 -> 返回成员总数
map.clear(obj) // true清除所有成员
map.delete(obj) // true
注意点
- 如果Map中的某一键值为对象,get的时候不能将整个对象写在里面,需要写该对象的引用,这样才是指向同一个内存地址;
- 简单类型值只要两个值严格相等则可以像上面这样做。
遍历方法
- map.keys()可以拿到所有的键名
- map.values()可以拿到所有的键值
- map.entries()返回所有成员
- map.forEach()可以遍历所有成员,类似JS中本来就有的forEach方法:
map.forEach(function(value, key, map) {
console.log("Key: %s, Value: %s", key, value);
});
数据结构互换
- map转换为数组:
...map
即可 - 数组转换为map,只需要将数组传入map构造函数
- Map 转为对象:需要手动遍历转换,只有在所有键都为字符串的时候才可行
- Map转换为JSON:可以在数组或者对象的基础上操作