Javascript的对象,本质上是键值对的集合,但是传统上只能用字符串当作键。
ES6提供了Map数据结构,它类似于对象,也是键值对的集合,但是"键"的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
let m=new Map();
let o={p:'key'};
m.set(o,'aaa');
m.get(o); // 'aaa'
作为构造函数,Map也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组
let map=new Map([
['name','张三'],
['age',18]
])
map.size // 2
Map的属性和方法
(1)size属性:返回Map结构的成员总数
(2)set(key,value):设置键值,返回Map结构
let m=new Map();
m.set('key1',1);
m.set(111,'aa');
m // {'key1'=>1,111=>'aa'}
如果key已经有值,则键值会被更新,否则生成新键。返回的是当前Map对象,可采用链式写法
(3)get(key):读取key对应的键值,如果找不到key值,返回undefined
let m=new Map();
m.set('a',1).set('b',2);
m.get('b') // 2
(4)has(key):返回布尔值,判断某个key是否在当前Map对象中
let m=new Map();
m.set('a',1).set('b',2);
m.has('b') // true
(5)delete(key):删除某个key,返回true;如果删除失败,返回false
let m=new Map();
m.set('a',1).set('b',2);
m.delete('b') // true
m.delete(a) // false
(6)clear:清楚所有成员,没有返回值
let m=new Map();
m.set('a',1).set('b',2);
console.log(m); // {'a'=>1,'b'=>2}
m.clear();
console.log(m); // {}
遍历方法
Map 结构原生提供三个遍历器生成函数和一个遍历方法。
(1)keys():返回键名的遍历器
(2)values():返回键值的遍历器
(3)entries():返回所有成员的遍历器
(4)forEach():遍历Map的所有成员
let m=new Map([
['a',1],
['b',2]
]);
m.keys(); // {'a','b'}
m.values(); // {1,2}
m.entries(); // {'a'=>1,'b'=>2}
for(let [key,value] of m){
console.log(key,value)
}
// a 1
// b 2
Map结构转为数组结构,快速的方法是使用扩展运算符
let m=new Map();
m.set('a',1).set('b',2);
let arr=[...m.keys()]; // ['a','b']
[...m.values()] // [1,2]
[...m.entries()] // [['a',1],['b',2]]
[...m] // [['a',1],['b',2]]
同时,数组的map方法、filter方法也可用于Map的遍历和过滤