前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数组对象转为Map

数组对象转为Map

作者头像
前端黑板报
发布2020-10-27 10:45:57
5.2K0
发布2020-10-27 10:45:57
举报
文章被收录于专栏:前端黑板报

点击上方蓝色字体,关注我们

数据类型的转换在业务代码中肯定很常见,因为不同的数据结构使用不同的情况。比如数组适合下标快速检索,对象适合根据键快速检索。

举个例子:一个下拉选择框

数据结构:arrApps

代码语言:javascript
复制
[
    {
      'appId': 'test-app',
      'name': 'test-app',
      'remarks': null,
      'roles': [
        'ADMIN',
        'DEVELOPER',
      ],
    },
    {
      'appId': 'test2-app',
      'name': 'test2-app',
      'remarks': null,
      'roles': [
        'ADMIN',
        'DEVELOPER',
      ],
    },
]

展示如下:

业务代码中还有一个 currentApp 供其他地方使用:

代码语言:javascript
复制
{
    'appId': 'test-app',
    'name': 'test-app',
    'remarks': null,
    'roles': [
      'ADMIN',
      'DEVELOPER',
    ],
}

每次切换下拉框的时候,需要更改 currentApp 的值。

暴力方法就是每次根据下拉框的值,循环遍历数据然后对比:

代码语言:javascript
复制
val:下拉框选择的值
for(arr){
   if(val == arr[i].name){
       currentApp = arr[i]
       break
   }
}

这样的时间复杂度为O(n),空间复杂度 O(1)。

那能不能把时间复杂度降到O(1),当然有喽!

那就是先把 arrApps 转为一个以 name 为 key 的 Map 结构 mapApps:

代码语言:javascript
复制
{
   'test-app'=>{name:'test-app',remarks:null},
   'test2-app'=>{name:'test2-app',remarks:null},
}

那检索的时候就很快啦:

代码语言:javascript
复制
val:下拉框选择的值
currentApp = mapApps.get(val)

如何转换呢?

Map 语法:

代码语言:javascript
复制
new Map([iterable])

let myMap = new Map([
  [1, 'one'],
  [2, 'two'],
  [3, 'three'],
])

我们先把 arrApps 转为二维数组:

代码语言:javascript
复制
arrApps.map(item=>[item.name,item])

全部代码:

代码语言:javascript
复制
mapApps = new Map(arrApps.map(item=>[item.name,item]))

目前10000+人已关注加入我们

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端黑板报 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档