这段代码怎么优化, 老大说 转成ES6的map数据结构,我转的可能不对好像更慢啦
这是我做的优化,好像更慢了 请大神们指教
objToStrMap初始化一次就可以了,你循环中每次都在初始化,这样会比较慢。
补充说明
const objToStrMap=function (obj) {
var myMap=new Map();
obj.forEach(
(item) => myMap.set(item.typeId, item.name)
);
return myMap;
}
var serviceTypeList=[
{
'typeId':1,
'name':'first'
},
{
'typeId':2,
'name':'second'
},
]
function init(){
serviceTypeList= objToStrMap(serviceTypeList)
}
init();//预先初始化,应用启动前或确保在getServiceTypeName服务调用前已经被初始化完成。
getServiceTypeName=function (code) {
return serviceTypeList.get(code);
}
console.log(getServiceTypeName(2)); //输出:second
...
先转成键值对为name:Id的map结构。然后就可以直接用name去拿相应的id。你完全没搞懂他给你说的方法的意思。
先把type数组转化成map结构,然后通过map.get(code)去拿就好了。不用遍历。
function中,可以这样写
let result = serviceTypeList.map((val)=> val.typeId === code);
retVal = result.name;
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
用
filter()
确实可以一句话搞定,但是,效率不高。其实可以用find
(参考 MDN)可惜 IE 不支持
find()
,所以在 MDN 文档快结束的地方,有一个 Polyfill。如果说采用 map 来实现,也不需要用 ES6 的 Map,因为原生对象就支持 string 类型的 key,但不管怎么实现,这个 map 的转换应该在
getServiceTypeName
之外进行。因为转换的过程比你写的for ... of
更耗时。