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

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

JS數(shù)據(jù)轉(zhuǎn)成父子節(jié)點(diǎn)數(shù)據(jù)

JS數(shù)據(jù)轉(zhuǎn)成父子節(jié)點(diǎn)數(shù)據(jù)

慕桂英3389331 2019-05-14 11:41:20
原始的數(shù)據(jù)是平鋪的比如originalData:[{company:'AAA',department:'AAA-D1',office:'AAA-D1-O1',pass:1,onhold:3},{company:'AAA',department:'AAA-D1',office:'AAA-D1-O2',pass:3,onhold:5},{company:'AAA',department:'AAA-D2',office:'AAA-D2-O1',pass:2,onhold:7},{company:'BBB',department:'BBB-D1',office:'BBB-D1-O1',pass:1,onhold:3},{company:'BBB',department:'BBB-D2',office:'BBB-D2-O1',pass:4,onhold:3},{company:'BBB',department:'BBB-D3',office:'BBB-D3-O1',pass:1,onhold:3},........]希望轉(zhuǎn)換成treeData:[{label:'AAA',department:'AAA-D1',office:'AAA-D1-O1',pass:6,onhold:15,//companylevelchildren:[//departmentlevel{label:'AAA-D1',pass:4,onhold:8,children:[//officelevel{label:'AAA-D1-O1',pass:1,onhold:3},{label:'AAA-D1-O2',pass:1,onhold:3},]},{label:'AAA-D2',pass:2,onhold:7,children:[{label:'AAA-D2-O1',pass:1,onhold:3},]},]},......]根據(jù)指定的列轉(zhuǎn)換成父子結(jié)構(gòu)的數(shù)據(jù)比如上面的是根據(jù)['company','department','office']不知道怎么寫了請(qǐng)大神指導(dǎo):(:(:(:(:(
查看完整描述

2 回答

?
qq_笑_17

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

答完才發(fā)現(xiàn)你要的是能根據(jù)指定列進(jìn)行映射...
那我再想想,下面的當(dāng)參考吧ORZ...
varmap=originalData.reduce((p,c)=>{
let{company,department,office,pass,onhold}=c
if(!p[company])p[company]={}
if(!p[company][department])p[company][department]={}
p[company][department][office]={pass,onhold}
returnp
},{})
varreduce=(obj,key)=>obj.children.reduce((p,c)=>[p+=c[key],p][1],0)
varresult=Object.keys(map).map(cKey=>{
letcompany={label:cKey}
company.children=Object.keys(map[cKey]).map(dKey=>{
letdepartment={label:dKey}
department.children=Object.keys(map[cKey][dKey]).map(oKey=>{
letoffice=map[cKey][dKey][oKey]
return{label:oKey,pass:office.pass,onhold:office.onhold}
})
['onhold','pass'].forEach(key=>department[key]=reduce(department,key))
returndepartment
})
['onhold','pass'].forEach(key=>company[key]=reduce(company,key))
returncompany
})
輸出:
[
{
"label":"AAA","onhold":15,"pass":6
"children":[{"label":"AAA-D1","onhold":8,"pass":4
"children":[{"label":"AAA-D1-O1","pass":1,"onhold":3},
{"label":"AAA-D1-O2","pass":3,"onhold":5}]
},{
"label":"AAA-D2","onhold":7,"pass":2
"children":[{"label":"AAA-D2-O1","pass":2,"onhold":7}]
}]
},{
"label":"BBB","onhold":9,"pass":6
"children":[{"label":"BBB-D1","onhold":3,"pass":1
"children":[{"label":"BBB-D1-O1","pass":1,"onhold":3}]
},{
"label":"BBB-D2","onhold":3,"pass":4
"children":[{"label":"BBB-D2-O1","pass":4,"onhold":3}]
},{
"label":"BBB-D3","onhold":3,"pass":1
"children":[{"label":"BBB-D3-O1","pass":1,"onhold":3}]
}]
}]
思路上是先把原始數(shù)組做一次樹級(jí)映射,然后再從樹生成各層次信息,這樣會(huì)比較好理解一些。
你題目描述中有一些奇怪的地方:companylevel里的department和office的取值標(biāo)準(zhǔn)不清楚,所以就沒寫,不過這個(gè)要加也就是在生成result那一步,創(chuàng)建company時(shí)加入節(jié)點(diǎn)信息即可,不會(huì)很難。
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-14
?
至尊寶的傳說

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

你的輸出格式應(yīng)該有問題,起碼label:'AAA',department:'AAA-D1',office:'AAA-D1-O1',pass:6,onhold:15,//companylevel是不合理的,最多是label:'AAA',pass:6,onhold:15,//companylevel吧如果數(shù)據(jù)能夠保證全是這樣的結(jié)構(gòu)(只有如上的3級(jí)),其實(shí)還是比較好處理的。
varmoriginalData=[
{company:'AAA',department:'AAA-D1',office:'AAA-D1-O1',pass:1,onhold:3},
{company:'AAA',department:'AAA-D1',office:'AAA-D1-O2',pass:3,onhold:5},
{company:'AAA',department:'AAA-D2',office:'AAA-D2-O1',pass:2,onhold:7},
{company:'BBB',department:'BBB-D1',office:'BBB-D1-O1',pass:1,onhold:3},
{company:'BBB',department:'BBB-D2',office:'BBB-D2-O1',pass:4,onhold:3},
{company:'BBB',department:'BBB-D3',office:'BBB-D3-O1',pass:1,onhold:3}
];
functiona2o(originalData){
varoutData=[];
varoutObj={};
for(vari=0;ivarcompany=originalData[i].company;
vardepartment=originalData[i].department;
varoffice={label:originalData[i].office,pass:originalData[i].pass,onhold:originalData[i].onhold};
if(outObj[company]===undefined){
outObj[company]={childrenKey:[],pass:0,onhold:0};
}
if(outObj[company][department]===undefined){
outObj[company][department]={children:[],pass:0,onhold:0};
outObj[company].childrenKey.push(department)
}
outObj[company][department].children.push(office);
outObj[company][department].pass=outObj[company][department].pass+office.pass;
outObj[company].pass=outObj[company].pass+office.pass;
outObj[company][department].onhold=outObj[company][department].onhold+office.onhold;
outObj[company].onhold=outObj[company].onhold+office.onhold;
}
for(varcominoutObj){
vartmpA={label:com,pass:outObj[com].pass,onhold:outObj[com].onhold,children:[]};
for(varj=0;jvartD=outObj[com][outObj[com].childrenKey[j]];
tmpA.children.push({label:outObj[com].childrenKey[j],
pass:tD.pass,
onhold:tD.onhold,
children:tD.children});
}
outData.push(tmpA);
}
returnoutData;
}
vartreeDate=a2o(moriginalData)
console.log(treeDate);
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-14
  • 2 回答
  • 0 關(guān)注
  • 430 瀏覽
慕課專欄
更多

添加回答

舉報(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)