亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JS數據轉成父子節點數據

JS數據轉成父子節點數據

翻閱古今 2019-03-12 17:15:57
原始的數據是平鋪的 比如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},        ....        ....      ]希望轉換成treeData: [    { label: 'AAA', department:'AAA-D1', office: 'AAA-D1-O1', pass: 6, onhold: 15,   // company level         children: [  // department level             {label: 'AAA-D1',  pass: 4, onhold: 8,                children: [  // office level                    {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},                ]            },        ]    },    ...    ...]    根據指定的列 轉換成父子結構的數據 比如 上面的是根據 ['company', 'department', 'office'] 不知道怎么寫了 請大神指導 :( :( :( :( :(
查看完整描述

2 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

你的輸出格式應該有問題,起碼

label: 'AAA', department:'AAA-D1', office: 'AAA-D1-O1', pass: 6, onhold: 15, // company level 是不合理的,最多是label: 'AAA', pass: 6, onhold: 15, // company level 吧

如果數據能夠保證全是這樣的結構(只有如上的3級),其實還是比較好處理的。


var moriginalData= [

        { 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}

      ];

function a2o(originalData){

    var outData=[];

    var outObj={};

    for(var i=0;i<originalData.length;i++){

        var company= originalData[i].company;

        var department= originalData[i].department;

        var office={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( var com in outObj){

        var tmpA={label:com, pass:outObj[com].pass, onhold:outObj[com].onhold, children:[]};

        for (var j=0; j<outObj[com].childrenKey.length; j++ ){

            var tD=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);

    }

    return outData;

}   


var treeDate=a2o(moriginalData)

console.log(treeDate);  


查看完整回答
反對 回復 2019-04-04
  • 2 回答
  • 0 關注
  • 552 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號