数据结构Map

map是ES提供的一种字典数据结构

字典结构——用来存储不重复key的hash结构。不同于集合(set)的是,字典使用的是键值对的形式来存储数据

JavaScript对象(object:{})只能用字符串来当key,这对使用带来了不便,为了解决这个问题,ES6提供了map数据结构。其类似于对象,也是键值对的集合,但“key”的范围不仅限于字符串,而是各种类型的值都可以当做key。也就是说,object提供了“字符串-值”的对应结构,map则提供的是“值-值”的对应。是一种更加完善的hash结构。

 

对象对map结构的支持演示

var data1={a:1},
      data2={b:2},
      obj={};
      //为obj对象添加属性(将data1和data2作为属性名)
      obj[data1]=1;
      obj[data2]=2;
      console.log(obj);

可以看到结果并非我们需要的

创建一个map

const map=new Map([
     ['a',1],
     ['b',2]
]);
console.log(map);

上面的['a',1]代表,将a作为key,1作为value声明

那么是否['a',1]中能写入第三个元素呢?答案是可以的,但是!ES6不会理你

map类的属性——size        用于获取map的长度

console.log(map.size);

map类的方法——set   Map.set(key,value)  设置键名key对应的键值为value,然后返回整个map结构。如果key已经有值,则键值会被更新,否则生成新的键

console.log(map.set([1,2,3],'3元素的数组'));
//也可以链式添加
map.set('name','张三').set('age',28);
console.log(map);

map类的方法——get  Map.get(key)    读取key对应的键值,如果获取不到则返回undefined

console.log(map.get('name'));

map类的方法——delete   Map.delete(key)     删除某个键,如果删除成功返回true,否则返回false

console.log(map.delete('name'));

map类的方法——has      Map.has(key)        判断某个键是否存在于map中,返回布尔值

console.log(map.has('name'));

map类的方法——clear    Map.clear()         清除所有数据,没有返回值

map.clear()

map类的方法——keys     Map.keys()          返回键名的遍历器

console.log(map.keys());

map类的方法——values   Map.values()        返回键值的遍历器

console.log(map.values());

map类的方法——entries  Map.entries()       返回键值对的遍历器

console.log(map.entries());

map类的方法——forEach  map.forEach(function(){})   使用回调遍历每一个成员

map.forEach(function (value, key, map) {
      console.log(`这是key:${key},这是value:${value},这是map本身:${map}`);
})

Map在使用过程中需要注意的地方

1.在js中NaN是不等于自身的一种数据类型,但是在map中,多次set以NaN为key的数据的时候,会产生覆盖的行为。说明map会将NaN视为同一个键

map.set(NaN,1).set(NaN,10);
console.log(map);

2.如果map数据中以空对象作为key({})的话,会发现,出现了两个key,这是因为每一个{}都是全新的引用,其不同的是内存地址。而反观上面的NaN,其地址只有一个,所以才会出现覆盖的情况

map.set({},1).set({},2);
console.log(map);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值