JSON2HTML

Q:返回的JSON包含多個同級對象 每個對象有ID和PARENTID 要求找到每個子級對應(yīng)的父級 并通過縮進(jìn)的不同體現(xiàn)出層級結(jié)構(gòu)
A:這個是在翻版zipkin的時候遇到的問題 核心思路是 通過找到?jīng)]有parentid的節(jié)點作為根節(jié)點 (后來調(diào)API的時候發(fā)現(xiàn)有時返回的所有對象都有parentid 此時將parentid===traceid的對象作為根節(jié)點) 然后創(chuàng)建一個新的數(shù)組用來存放已經(jīng)加工好的新的JSON (需要引入深度來控制縮進(jìn)樣式 要在原數(shù)組中剔除已經(jīng)匹配到父級的子級和新數(shù)組中添加已匹配到父級的子級 因為在循環(huán)中可能先出現(xiàn)子級 同時注意回滾) 最后將加工好的對象取出來 做遞歸 即可畫出頁面

function json2html() {
    //模擬數(shù)據(jù)
    var json4test = [{
        "id": "0",
        "name": "0"
    }, {
        "id": "4",
        "name": "4",
        "parentId": "5"
    }, {
        "id": "1",
        "name": "1",
        "parentId": "0"
    }, {
        "id": "2",
        "name": "2",
        "parentId": "1"
    }, {
        "id": "7",
        "name": "7",
        "parentId": "0"
    }, {
        "id": "3",
        "name": "3",
        "parentId": "1"
    }, {
        "id": "5",
        "name": "5",
        "parentId": "0"
    }, {
        "id": "6",
        "name": "6",
        "parentId": "0"
    }];

    //理想結(jié)果
    // 0
    //      1
    //          2
    //          3
    //      7
    //      5
    //          4
    //      6

    //清空為畫頁面準(zhǔn)備的DIV
    $("#test_div").empty();

    var rootObj = {};
    var newJsonArr = [];
    //找到根節(jié)點
    for (var i = 0; i < json4test.length; i++) {
        if (!json4test[i].parentId) {
            //引入深度 控制縮進(jìn)樣式
            json4test[i].deep = 0;
            rootObj = json4test[i];
            //創(chuàng)建新數(shù)組根節(jié)點
            newJsonArr.push(rootObj);
            //從原數(shù)據(jù)組中剔除根節(jié)點
            json4test.splice(i, 1);
        }
    }

    //為每個孩子匹配到父級
    for (var i = 0; i < newJsonArr.length; i++) {
        for (var j = 0; j < json4test.length; j++) {
            if (json4test[j].parentId == newJsonArr[i].id) {
                //孩子深度為父級深度+1
                json4test[j].deep = newJsonArr[i].deep + 1;
                //創(chuàng)建孩子節(jié)點
                if (!newJsonArr[i].childArr) {
                    newJsonArr[i].childArr = [];
                }
                //裝入孩子節(jié)點
                newJsonArr[i].childArr.push(json4test[j]);
                //更新孩子節(jié)點到新數(shù)組中 避免孩子節(jié)點先于父級節(jié)點出現(xiàn)于數(shù)組中 漏掉同時
                //上一句 配合上一句在下次循環(huán)中 同時添加其孩子節(jié)點
                newJsonArr.push(json4test[j]);
                //剔除掉該孩子節(jié)點
                json4test.splice(j, 1);
                //回滾一次
                j = j - 1;
            }
        }
    }

    //取得處理完成的新對象 數(shù)組中其他元素只是為操作數(shù)組第一個元素服務(wù)
    var newObj = newJsonArr[0];
    //加工新對象 為畫頁面做準(zhǔn)備
    dealNewObj(newObj);

}

/**
 * [dealNewObj 加工新對象]
 * @param  {[type]} newObj [description]
 * @return {[type]}        [description]
 */
function dealNewObj(newObj) {
    //如果有孩子節(jié)點 先畫出自己 然后遞歸
    if (newObj.childArr) {
        drawHtml(newObj);
        for (var i = 0; i < newObj.childArr.length; i++) {
            dealNewObj(newObj.childArr[i]);
        }
    } else {
        drawHtml(newObj);
    }
}

/**
 * [drawHtml 畫出頁面]
 * @param  {[type]} newObj [description]
 * @return {[type]}        [description]
 */
function drawHtml(newObj) {
    var panel = "";
    panel = "<span style='margin-left:" + 10 * newObj.deep + "px;'>" + newObj.name + "</span><br/>";
    $("#test_div").append(panel);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末合搅,一起剝皮案震驚了整個濱河市科乎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凶伙,老刑警劉巖昏翰,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苍匆,死亡現(xiàn)場離奇詭異,居然都是意外死亡棚菊,警方通過查閱死者的電腦和手機(jī)浸踩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來统求,“玉大人民轴,你說我怎么就攤上這事∏蚨” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵瑰钮,是天一觀的道長冒滩。 經(jīng)常有香客問我,道長浪谴,這世上最難降的妖魔是什么开睡? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮苟耻,結(jié)果婚禮上篇恒,老公的妹妹穿的比我還像新娘。我一直安慰自己凶杖,他們只是感情好胁艰,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般腾么。 火紅的嫁衣襯著肌膚如雪奈梳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天解虱,我揣著相機(jī)與錄音攘须,去河邊找鬼。 笑死殴泰,一個胖子當(dāng)著我的面吹牛于宙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悍汛,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼捞魁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了员凝?” 一聲冷哼從身側(cè)響起署驻,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎健霹,沒想到半個月后旺上,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡糖埋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年宣吱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞳别。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡征候,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祟敛,到底是詐尸還是另有隱情疤坝,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布馆铁,位于F島的核電站跑揉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏埠巨。R本人自食惡果不足惜历谍,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辣垒。 院中可真熱鬧望侈,春花似錦、人聲如沸勋桶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岂丘,卻和暖如春陵究,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奥帘。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工铜邮, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寨蹋。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓松蒜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親已旧。 傳聞我的和親對象是個殘疾皇子秸苗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)运褪,斷路器惊楼,智...
    卡卡羅2017閱讀 134,638評論 18 139
  • 1 序 2016年6月25日夜,帝都秸讹,天下著大雨檀咙,拖著行李箱和同學(xué)在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,083評論 0 12
  • 今日待辦清單: 1璃诀、寫一篇文章發(fā)布到微信公眾號弧可、簡書、今日頭條等平臺劣欢。(大約需要3小時) 2棕诵、做早飯、吃早飯 3凿将、...
    黃小妞兒閱讀 253評論 0 0
  • 農(nóng)歷正月初九隨民協(xié)采風(fēng)團(tuán)一探皇后村校套,下午轉(zhuǎn)探牛嶺山村,因?qū)W校有事牧抵,半途折返搔确,作“逃兵”而去,留得深深遺憾灭忠。采風(fēng)團(tuán)文...
    西嶺布衣閱讀 823評論 0 2