定义:Map是一组键值对的结构,键可以为数字,数组,对象等,是ES6标准新增的数据类型,
优点:具有很快的查询速度,主要用于数据存储
创建:
var m = new Map([[1, 'zhang'], [2, 'wang'], [3, 'li']]);
//参数为二维数组或者一个对象
常用方法:
keys 获取所有的key
values 获取所有的value
forEach 循环map对象
set 添加一个新建元素到映射。
get 返回映射中的指定元素。
has 如果映射包含指定元素,则返回 true。
forEach 对映射中的每个元素执行指定操作。
delete 从映射中移除指定的元素。
clear 从映射中移除所有元素。
属性:
size 返回map对象的长度
复制:
let original = new Map([[1, 'one']]);
let clone = new Map(original);
console.log(clone.get(1)); // one
console.log(original === clone); // false. 浅比较 不为同一个对象的引用,如果直接赋值的话为浅拷贝
与数组的互相转换:
let kvArray = [["key1", "value1"], ["key2", "value2"]];
// 使用常规的Map构造函数可以将一个二维键值对数组转换成一个Map对象
let myMap = new Map(kvArray);
myMap.get("key1"); // 返回值为 "value1"
// 使用Array.from函数可以将一个Map对象转换成一个二维键值对数组
console.log(Array.from(myMap)); // 输出和kvArray相同的数组
// 更简洁的方法来做如上同样的事情,使用展开运算符
console.log([...myMap]);
// 或者在键或者值的迭代器上使用Array.from,进而得到只含有键或者值的数组
console.log(Array.from(myMap.keys())); // 输出 ["key1", "key2"]
合并:
let first = new Map([[1, 'one'], [2, 'two'], [3, 'three'],]);
let second = new Map([[1, 'uno'], [2, 'dos']]);
// Map对象同数组进行合并时,如果有重复的键值,则后面的会覆盖前面的。
let merged = new Map([...first, ...second, [1, 'eins']]);
console.log(merged.get(1)); // eins
console.log(merged.get(2)); // dos
console.log(merged.get(3)); // three