点击上方蓝色字体,关注我们
数据类型的转换在业务代码中肯定很常见,因为不同的数据结构使用不同的情况。比如数组适合下标快速检索,对象适合根据键快速检索。
举个例子:一个下拉选择框
数据结构:arrApps
[
{
'appId': 'test-app',
'name': 'test-app',
'remarks': null,
'roles': [
'ADMIN',
'DEVELOPER',
],
},
{
'appId': 'test2-app',
'name': 'test2-app',
'remarks': null,
'roles': [
'ADMIN',
'DEVELOPER',
],
},
]
展示如下:
业务代码中还有一个 currentApp 供其他地方使用:
{
'appId': 'test-app',
'name': 'test-app',
'remarks': null,
'roles': [
'ADMIN',
'DEVELOPER',
],
}
每次切换下拉框的时候,需要更改 currentApp 的值。
暴力方法就是每次根据下拉框的值,循环遍历数据然后对比:
val:下拉框选择的值
for(arr){
if(val == arr[i].name){
currentApp = arr[i]
break
}
}
这样的时间复杂度为O(n),空间复杂度 O(1)。
那能不能把时间复杂度降到O(1),当然有喽!
那就是先把 arrApps 转为一个以 name 为 key 的 Map 结构 mapApps:
{
'test-app'=>{name:'test-app',remarks:null},
'test2-app'=>{name:'test2-app',remarks:null},
}
那检索的时候就很快啦:
val:下拉框选择的值
currentApp = mapApps.get(val)
如何转换呢?
Map 语法:
new Map([iterable])
let myMap = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
])
我们先把 arrApps 转为二维数组:
arrApps.map(item=>[item.name,item])
全部代码:
mapApps = new Map(arrApps.map(item=>[item.name,item]))
目前10000+人已关注加入我们