欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript中Map的使用

程序员文章站 2022-04-06 16:44:05
...

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

语法

new Map([iterable])

iterable

Iterable 可以是一个数组或者其他 iterable 对象,其元素或为键值对,
或为两个元素的数组。 每个键值对都会添加到新的 Map。null 会被当做 undefined。

Objects 和 maps 的比较

ObjectMap 类似的是,它们都允许你按键存取一个值、删除键、检测一个键是否绑定了值。因此(并且也没有其他内建的替代方式了)过去我们一直都把对象当成 Map 使用。不过 MapObject 有一些重要的区别,在下列情况里 Map 会是更好的选择:

  • 一个对象的键只能是字符串或者 Symbols"Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法:"new Symbol()"。"),但一个 Map 的键可以是任意值,包括函数、对象、基本类型。
  • 你可以通过 size 属性直接获取一个 Map 的键值对个数,而 Object 的键值对个数只能手动计算。
  • Map 是可迭代的,而 Object 的迭代需要先获取它的键数组然后再进行迭代。
  • Object 都有自己的原型,所以原型链上的键名有可能和对象上的键名产生冲突。虽然 ES5 开始可以用 map = Object.create(null) 来创建一个没有原型的对象,但是这种用法不太常见。
  • Map 在涉及频繁增删键值对的场景下会有些性能优势。

实际使用

/**
 * map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
 * map() 方法按照原始数组元素顺序依次处理元素。
 * 注意: map() 不会对空数组进行检测。
 * 注意: map() 不会改变原始数组。
 */
var m = new Map([[1,"x"],[2,"y"],[3,"z"]]);

//返回Map对象的键/值对的数量。
console.log(m.size)
//map赋值
m.set("key","value")
//判断是否有值
m.has("bar"); // false
//返回键对应的值,如果不存在,则返回undefined。
m.get("key")
//移除任何与键相关联的值,并且返回该值,该值在之前会被Map.prototype.has(key)返回为true。
//之后再调用Map.prototype.has(key)会返回false。
m.delete("key")
//返回一个新的 Iterator对象, 它按插入顺序包含了Map对象中每个元素的键 。
m.keys();
//清空map中的值
m.clear();
for of 遍历map
for (var x of m){
    //遍历map
    console.log(x);
    console.log(x[0]);
    // test();
    // console.log(area_of_circle(3));
}
//Map的回调函数参数依次为value、key和map本身:
m.forEach(function(value,key,map){
    console.log('value='+value+',key='+key+',map='+map)
})