javascript - 性能優(yōu)化的問題
問題描述

這段代碼怎么優(yōu)化, 老大說(shuō) 轉(zhuǎn)成ES6的map數(shù)據(jù)結(jié)構(gòu),我轉(zhuǎn)的可能不對(duì)好像更慢啦
這是我做的優(yōu)化,好像更慢了 請(qǐng)大神們指教
問題解答
回答1:用 filter() 確實(shí)可以一句話搞定,但是,效率不高。其實(shí)可以用 find (參考 MDN)
function getServiceTypeName(code) { return serviceTypeList.find(val => val.name === code);}
可惜 IE 不支持 find(),所以在 MDN 文檔快結(jié)束的地方,有一個(gè) Polyfill。
如果說(shuō)采用 map 來(lái)實(shí)現(xiàn),也不需要用 ES6 的 Map,因?yàn)樵鷮?duì)象就支持 string 類型的 key,但不管怎么實(shí)現(xiàn),這個(gè) map 的轉(zhuǎn)換應(yīng)該在 getServiceTypeName 之外進(jìn)行。因?yàn)檗D(zhuǎn)換的過程比你寫的 for ... of 更耗時(shí)。
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);}回答2:
objToStrMap初始化一次就可以了,你循環(huán)中每次都在初始化,這樣會(huì)比較慢。
補(bǔ)充說(shuō)明
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();//預(yù)先初始化,應(yīng)用啟動(dòng)前或確保在getServiceTypeName服務(wù)調(diào)用前已經(jīng)被初始化完成。getServiceTypeName=function (code) { return serviceTypeList.get(code);}console.log(getServiceTypeName(2)); //輸出:second回答3:
...
先轉(zhuǎn)成鍵值對(duì)為name:Id的map結(jié)構(gòu)。然后就可以直接用name去拿相應(yīng)的id。你完全沒搞懂他給你說(shuō)的方法的意思。
先把type數(shù)組轉(zhuǎn)化成map結(jié)構(gòu),然后通過map.get(code)去拿就好了。不用遍歷。
回答4:function中,可以這樣寫let result = serviceTypeList.map((val)=> val.typeId === code);retVal = result.name;
回答5:半行代碼就搞定
serviceTypeList.filter(obj => obj.id==*code*)[0].name回答6:
循環(huán)里做filter這個(gè)操作本身不慢的。
什么轉(zhuǎn)成map的方案需要考慮轉(zhuǎn)換本身的開銷
一部分語(yǔ)言自帶的map實(shí)現(xiàn),在集合很小的時(shí)候用的就是數(shù)組,省去了hashcode的操作反而提高效率
相關(guān)文章:
1. javascript - sublime快鍵鍵問題2. javascript - immutable配合react提升性能?3. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽數(shù)據(jù)變化4. 配置Apache時(shí),添加對(duì)PHP的支持時(shí)語(yǔ)法錯(cuò)誤5. css - 寫頁(yè)面遇到個(gè)布局問題,求大佬們幫解答,在線等,急!~6. javascript - nodejs關(guān)于進(jìn)程間發(fā)送句柄的一點(diǎn)疑問7. javascript - 移動(dòng)端上不能實(shí)現(xiàn)拖拽布局嗎?8. phpstudy8.1支持win11系統(tǒng)嗎?9. 實(shí)現(xiàn)bing搜索工具urlAPI提交10. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問?

網(wǎng)公網(wǎng)安備