Map是一组键值对的结构,用于解决以往不能用对象做为键的问题
- 具有极快的查找速度
- 函数、对象、基本类型都可以作为键或值
声明定义
可以接受一个数组作为参数,该数组的成员是一个表示键值对的数组。接收数组的前两个参数,一个为键一个为值
let m = new Map([
['houdunren', '后盾人'],
['hdcms', '开源系统']
]);
console.log(m.get('houdunren')); //后盾人
添加元素要使用使用set 方法,支持链式操作
let map = new Map();
let obj = {
name: "后盾人"
};
map.set(obj, "houdunren.com").set("name", "hdcms");
console.log(map.entries()); //MapIterator {{…} => "houdunren.com", "name" => "hdcms"}
对于键是引用类型的Map, 键保存的是内存地址,值相同但内存地址不同的视为两个键
例如,这里的arr和[“后盾人”] 的值是相同的,但内存地址不同
let arr = ["后盾人"];
const hd = new Map();
hd.set(arr, "houdunren.com");
console.log(hd.get(arr)); //houdunren.com
console.log(hd.get(["后盾人"])); //undefined
数组转换
可以使用展开语法 或 Array.form 静态方法将Map类型转为数组,这样就可以使用数组处理函数了
let hd = new Map([["houdunren", "后盾人"], ["hdcms", "开源系统"]]);
console.log(...hd); //(2) ["houdunren", "后盾人"] (2) ["hdcms", "开源系统"]
console.log(...hd.entries()); //(2) ["houdunren", "后盾人"] (2) ["hdcms", "开源系统"]
console.log(...hd.values()); //后盾人 开源系统
console.log(...hd.keys()); //houdunren hdcms
增删改查
let map=new Map()
map.set('name','xz');
map.set('age',18)
// console.log(map.get('name'));//xz
// console.log(map); //Map(2) {'name' => 'xz', 'age' => 18}
// console.log(map.age);//undefined
//增删查改
console.log( map.set({size:'xxxl'},'xXXl'));//{'name' => 'xz', 'age' => 18, {…} => 'xXXl'}
console.log(map.delete('age')); //true
console.log(map.has('age'));//false
console.log(map.get('name'));//xz
遍历数据
let map=new Map()
map.set('name','xz');
map.set('age',18)
//遍历数据
console.log(map.keys());//遍历所有的键
console.log(map.values());//遍历所有的值
console.log(map.entries());//entries() 方法返回一个数组的迭代对象,该对象包含数组的键值对 (key/value)。 MapIterator {'name' => 'xz', 'age' => 18}
// 迭代对象中数组的索引值作为 key, 数组元素作为 value。
map.set('xxxxx','xxxxxxxxxxxx')
map.set('lllllxx','lllxxxxxxxxx')
//key为键,value为值
for (const [key,value] of map.entries()){
console.log(key,value);//1.name xz 2.age 18
}
map.forEach((value,key)=>{
console.log(value,key);
})