Map对象

Map 简单用法

const map = new Map();

map.set('1', '123');
map.set(1, 123);
map.get(1); // 123
map.has('1'); // true
map.delete('1'); // true
map.clear();

为什么用 Map

  1. 之前我们使用对象来存储,但是对象的键只能是 string 和 symbol 类型。Map 可以存储任意类型的值作为键, 不会发生一个转换。
  2. 对象的键是无序的。 Map 可以保持写入的顺序。并且不会发生覆盖。
var obj = {
    a: '789'
    1: 123,
    '1': 456
}
最终输出来的是  {1: 456, a: '789'} 后面的会覆盖掉键一样的,并且会先排数字,其他属性顺序不变。
  1. 对象有一个原型,你的属性名可能和原型上的键相冲突。Map 默认情况下不包含任何键,只包含显示插入的键。
  2. 对象的长度需要手动的计算。Map 有 size 属性。
  3. 对象需要以某种方式获取它的键然后才能迭代。Map 是 iterable 可以直接迭代。
  4. 对象在频繁删除增加的情况下未做优化。Map 在频繁增删情况下表现的更好。

Map 键的相等

  1. 是基于 sameValueZero 算法的。
  2. NaN 与 NaN 相等。并且 是基于 === 来比较的。
  3. +0 与 -0 被认为是相等的。

迭代Map

for…of
let myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");
for (let [key, value] of myMap) {
  console.log(key + " = " + value);
}

for (let key of myMap.keys()) {
  console.log(key);
}

for (let value of myMap.values()) {
  console.log(value);
}

for (let [key, value] of myMap.entries()) {
  console.log(key + " = " + value);
}
forEach
myMap.forEach(function(value, key) {
  console.log(key + " = " + value);
})

Map 与 对象

Object.entries: 从对象创建 Map
let map = new Map([[], [], []])

我们想要把 对象 变为一个 map。

let obj = {
    name: 'john'
}
let map = new Map(Object.entries(obj)); 
map.get('name'); // john

Object.entries 会返回 键/值对数组:[[], []]

Object.fromEntires: 从Map创建对象
let prices = Object.fromEntries([
  ['banana', 1],
  ['orange', 2],
  ['meat', 4]
]);

// prices = {banana: 1, ...}

我们可以拿到 Map 的格式数据,从而转为一个对象

Object.fromEntries(map.entries()); // 创建出一个对象

因为 Object.fromEntries 期望得到一个可迭代对象作为参数,而不一定是数组。

并且 map 的标准迭代会返回跟 map.entries() 一样的键/值对。

Object.fromEntires(map); // 创建出一个对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值