Map
Map 是一个带键的数据项的集合,就像一个 Object 一样。 但是它们最大的差别是 Map 允许任何类型的键(key)。
它的方法和属性如下:
- new Map() —— 创建 map。
- map.set(key, value) —— 根据键存储值。
- map.get(key) —— 根据键来返回值,如果 map 中不存在对应的 key,则返回 undefined。
- map.has(key) —— 如果 key 存在则返回 true,否则返回 false。
- map.delete(key) —— 删除指定键的值。
- map.clear() —— 清空 map。
-
Map 迭代
如果要在 map 里使用循环,可以使用以下三个方法:
map.keys() —— 遍历并返回所有的键(returns an iterable for keys),
- map.values() —— 遍历并返回所有的值(returns an iterable for values),
- map.entries() —— 遍历并返回所有的实体(returns an iterable for entries)[key, value],for..of 在默认情况下使用的就是这个。
例如:
let map = new Map([['a',1],['b',2],['c',3]]);
console.log(map)
1console.log(map.get('a')) //1
for(let [key,value] of map.entries()) {
1 console.log(key,value); // 遍历返回所有成员的遍历器
}
// 1 a 1 , b 2 ,c 3
for(let keys of map.keys()) {
// console.log(keys) // a,b,c 返回键名
}
for (let value of map.values()) {
console.log(value); // 1,2,3 返回键值
}
Map 与其他数据类型的互相转换
1.map 转化为数组
let map = new Map();
map.set('a',1);
map.set('b',1);
map.set('c',1);
console.log(map) //Map(3) {'a' => 1, 'b' => 1, 'c' => 1}
let mapAry = [...map];
console.log(mapAry) // [Array(2), Array(2), Array(2)]
2.数组转化为map
let ary = ['a',2];
let map = new Map([['a',1],['b',2]]);
console.log(map) // Map(2) {'a' => 1, 'b' => 2}
3.map转化为对象
// 如果map所有键都是字符串则可以转化为对象
function strMapToObj(strMap){
let obj = Object.create(null);
for(let [key,value] of strMap) {
obj[key] = value;
}
return obj;
}
const map = new Map([['a',1],['b',2]]);
console.log(strMapToObj(map)) // {a:1,b:2}
4.对象转化为map
let obj = {
a:1,
b:2,
c:3
}
function objToMap(obj) {
let map = new Map();
for(let key of Object.entries(obj)){
map.set(...key)
}
return map;
}
console.log(objToMap(obj)) // {'a' => 1, 'b' => 2, 'c' => 3}