JavaScript的map方法

基本API

使用new关键字和map构造函数创建一个空映射

const m=new Map();

如果想在创建的同时初始化实例,可以给map构造函数传入一个可迭代的对象,需要包含键/值对数组。可迭代对象中的每个键/值对都会按照迭代顺序插入到新的映射实例中:

const m1=new Map([
['key1','1'],
['key2','2']
])
console.log(m1.size) //2

初始化之后可以使用set方法再添加键值对,size属性获取键值对的数量,delete方法和clear删除值,get和has进行查询。

顺序与迭代

与object类型的一个主要差别就是,map实例会维护插入的键值对的顺序,可以根据插入顺序进行迭代操作。
映射实例提供了一个迭代器(iterator),能以插入顺序生成[key,val]形式的数组。可以通过entries()方法(symbol.iterator属性,引用entries())取得这个迭代器:

const m1=new Map([
['key1','1'],
['key2','2']
])
console.log(m1.entries===m1[Symbol.iterator]) //true

for(let pair of m1.entries()){
    
    
console.log(pair)
//[key1,1]
//[key2,2]
}

因为entries是默认迭代器,可以直接对映射实例使用扩展操作,将映射转化为数组:

const m1=new Map([
['key1','1'],
['key2','2']
])
console.log(...m1)//[[key1,1],[key2,2]]

不使用迭代器可使用回调方式,foreach方法传入回调,依次迭代每个键值对

m1.foreach((val,key)=>console(`${
      
      key}-${
      
      val}`))
//key1-1
//key2-2

单独遍历key和val

for(let key of m1.keys()){
    
    
console.log(key)//key1 key2
}
for(let key of m1.values()){
    
    
console.log(key)//1 2
}

选择map还是object

对于大多数web开发来说map和object只是个人喜好问题,但是如果看重内存、性能,那么对象和映射之间存在比较显著的区别

内存占用

不同浏览器的情况不同,但是给定固定大小的内存,map可以比object多存储50%的键值对左右。

插入性能

两个插入键值对消耗差不多,但是插入map在浏览器中稍微快一点儿,如果涉及到大量插入操作,map更好一点

查找速度

如果只包含少量键值对,object有时候会比map快。把object当成数组的情况下,浏览器引擎可以进行优化,在内存中 可以使用更高效的布局,这个对map来说是不可能的,如果涉及到很多代码查找操作,object会比map更好

删除性能

对于大多数浏览器引擎来说,map的delete操作会更好一些。

猜你喜欢

转载自blog.csdn.net/weixin_43183219/article/details/126382070
今日推荐