Javascript – Probleme bei der Leistungsoptimierung
高洛峰
高洛峰 2017-07-05 10:54:21
0
6
1033


Wie optimiert man diesen Code? Der Chef sagte, dass er in die ES6-Kartendatenstruktur konvertiert werden sollte und dass er langsamer zu sein scheint

Das ist die Optimierung, die ich vorgenommen habe, sie scheint langsamer zu sein. Bitte geben Sie mir einen Rat

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

Antworte allen(6)
習慣沉默

filter() 确实可以一句话搞定,但是,效率不高。其实可以用 find (参考 MDN)

function getServiceTypeName(code) {
    return serviceTypeList.find(val => val.name === code);
}

可惜 IE 不支持 find(),所以在 MDN 文档快结束的地方,有一个 Polyfill。

如果说采用 map 来实现,也不需要用 ES6 的 Map,因为原生对象就支持 string 类型的 key,但不管怎么实现,这个 map 的转换应该在 getServiceTypeName 之外进行。因为转换的过程比你写的 for ... of 更耗时。

function toMap(list) {
    return list.reduce((map, item) => {
        map.set(item.name, item);
        return map;
    }, new Map());
}

serviceTypeMap = toMap(serviceTypeList);

function getServiceTypeName(code) {
    return serviceTypeMap.get(code);
}
代言

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;

仅有的幸福

半行代码就搞定

serviceTypeList.filter(obj => obj.id==*code*)[0].name
女神的闺蜜爱上我

循环里做filter这个操作本身不慢的。

什么转成map的方案需要考虑转换本身的开销

一部分语言自带的map实现,在集合很小的时候用的就是数组,省去了hashcode的操作反而提高效率

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage