数据结构-Map

map 是一种典型的字典类型的数据结构
字典: 是用来存储不重复key的Hash结构(对象就是字典类型的数据结构)。不同于集合(Set)的是,字典用的是[键,值]的形式来储存数据的。

JS的对象(Object:{})只能用字符串当作键。这给他的使用带来的很大的限制

为了解决这个问题,ES6提供了Map数据结构,它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键,也就是说,Object结构提供了“字符串-值”的对应,Map结构提供了“值-值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。

let obj1 = {a:1};
let obj2 = {b:2};
let obj = {};
obj[obj1] = 1;
obj[obj2] = 2;
// 因为对象的键只能是字符串,当发现键为对象时会自动调用toString()方法,对象调用toString()后都变成了【object Object】
console.log(obj); // 输出:{ '[object Object]': 2 
console.log(obj1.toString() === obj2.toString()); // true
}
  • 如何创建一个Map
const map = new Map([
	["a",1],
	["b",2]
]);
console.log(map); //  { 'a' => 1, 'b' => 2 }
  • Map 类的属性
    size属性,相当于数组的length
console.log(map.size); // 2
  • Map 类的方法
    1、set(key,value)设置键名key对应的键值为value,然后返回整个Map结构。如果key已经有值,则赋值会被更新,否则就新生成该键。
map.set("c",3).set("d",4);
console.log(map); // { 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4 }

2、get(key)get方法读取key对应的键值,如果找不到可以,返回undefined

map.get("a"); // 1;
map.get("e"); // undefined

3、delete(key)删除某个键,返回布尔值

map.delete("a"); // true
map.delete("a"); // false

4、has(key)某个键是否存在当前map集合中,返回布尔值

map.has("b"); // true
map.has("f"); // false

5、clear()清除所有数据,没有返回值

map.clear()

6、keys()返回键名的遍历器

map.keys()

7、values()返回兼职的遍历器

map.values()

8、entries()返回键值对的遍历器

map.entries()

9、forEach()使用回调函数遍历每个成员

map.forEach((key,value,map) => {
	console.log(keu + ":" + value); 
})

Map在使用过程中的一些注意事项:

1、map的键为NaN时,在map集合中 NaN === NaN,只会保留最后一个

const map = new Map();
map.set(NaN,2).set(NaN,3);
console.log(map); //  { NaN => 3 }

2、以对象作为map的键时,map集合会比较两个对象的内存地址

const map = new Map();
map.set({},1).set({},2)
console.log(map); // { {} => 1, {} => 2 }

3、map里key的顺序是按照添加书序进行排列的

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值