第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

通過Map結(jié)構(gòu)數(shù)據(jù)來處理業(yè)務(wù)邏輯中的response data?

通過Map結(jié)構(gòu)數(shù)據(jù)來處理業(yè)務(wù)邏輯中的response data?

眼眸繁星 2019-05-09 22:28:01
在業(yè)務(wù)開發(fā)過程中,會(huì)有很大概率在與后臺(tái)對(duì)接數(shù)據(jù)的時(shí)候,遇到這種數(shù)據(jù)格式{...data:[{...id:10000,name:'中國電信',...},],...}假設(shè)我們已經(jīng)將這個(gè)data渲染為一個(gè)列表,然后現(xiàn)在有一個(gè)需求:在一個(gè)Input組件中輸入id,之后對(duì)data中對(duì)應(yīng)的id那一項(xiàng)進(jìn)行某些業(yè)務(wù)處理。按之前的習(xí)慣,就直接這樣了//處理Input組件輸入事件handleInput(id){data.forEach(item=>{if(item.id===id){//拿到item,然后處理業(yè)務(wù)邏輯}})}但是這樣的話感覺每次都得將整個(gè)data遍歷一遍,感覺太浪費(fèi)性能了。所以在想可不可以用Map來處理一下,比如//將data轉(zhuǎn)換成類似Map的數(shù)據(jù)結(jié)構(gòu),或者newMap()貌似也可以?toMap(data,mainKey='id'){constmap={};data.forEach(item=>{map[mainKey]=item;});returnmap;}constmap=toMap(data);這樣轉(zhuǎn)換之后,后續(xù)就可以在handleInput(id)方法中直接用map[id]或者如果使用Map的話map.get(id)來獲取到對(duì)應(yīng)的item了。不知道這樣做在實(shí)際的業(yè)務(wù)開發(fā)中是否具有可行性。。。
查看完整描述

2 回答

?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊

我并不清楚js,所以我從c/c++的角度回答下。
用map是個(gè)不錯(cuò)的選擇,首先復(fù)雜度就已經(jīng)從n降到logn了,如果你的數(shù)據(jù)量級(jí)在上千以上的話,可以作個(gè)測試,比對(duì)下n和logn的時(shí)間差距(量級(jí)越大,差距越大)。
再者,就是你用了map后的這句代碼,
data.forEach(item=>{
map[mainKey]=item;
});
其中的forEach,我不清楚js是怎么實(shí)現(xiàn)的,至少在map中如果你要根據(jù)key找一個(gè)數(shù)據(jù),應(yīng)該用這個(gè)map提供的類似find的接口,這個(gè)接口的實(shí)現(xiàn)復(fù)雜度是logn。
用forEach,它實(shí)現(xiàn)的機(jī)制,可能是中序遍歷(利用左右孩子指針,具體參考線索二叉樹),也就是說,它的查找復(fù)雜度是n,一般用這種方法的目的,就是按序輸出所有數(shù)據(jù)。
所以,js的map容器的接口,是用find這種的,還是forEach,得去看文檔說明,或者谷歌,看下它們具體的內(nèi)部實(shí)現(xiàn)機(jī)制。
-----------------------------分割-----------------
看了下上面的回答,如果你的data可以O(shè)(1)索引取值的話,建一個(gè)哈希映射也可以,但內(nèi)存的代價(jià)自己估量,我說的哈希不是用map,它是一個(gè)整型數(shù)組,把id作為數(shù)組下標(biāo),data索引作為數(shù)組的值。
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-09
?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

可以啊,但是你寫的都太麻煩了
過濾直接用`filter:
[{id:1,name:'1'},{id:2,name:'2'}].filter(({id})=>id===1)
轉(zhuǎn)化直接用map:
[{id:1,name:'1'},{id:2,name:'2'}].map(d=>({[d.id]:d}))
```
寫成公用的toMap:
functiontoMap(data,key){
returndata.map(d=>({[d[key]]:d}))
}
想要獲取原始列表:
Object.values(toMap(data))
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-09
  • 2 回答
  • 0 關(guān)注
  • 1044 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)