JS數(shù)組對象:通過子id找所有父id

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script type="text/javascript">
        const city = [{
            companyId: 1,
            id: "1",
            label: "四川省",
            parentId: "",
            value: "1",
            children: [{
                companyId: 1,
                id: "2",
                label: "成都市",
                parentId: "1",
                value: "2",
                children: [{
                    companyId: 1,
                    id: "3",
                    label: "高新區(qū)",
                    parentId: "2",
                    value: "3",
                    children: [{
                        companyId: 1,
                        id: "4",
                        label: "環(huán)球中心",
                        parentId: "3",
                        value: "4"
                    }]
                }]
            }]
        }]
        const city2 = [
            {
                companyId: 1,
                id: "0",
                label: "江西省",
                parentId: "-99",
                value: "0",
            },
            {
                companyId: 1,
                id: "1",
                label: "四川省",
                parentId: "-99",
                value: "1",
            },
            {
                companyId: 1,
                id: "2",
                label: "成都市",
                parentId: "1",
                value: "2",
            },
            {
                companyId: 1,
                id: "3",
                label: "高新區(qū)",
                parentId: "2",
                value: "3",
            },
            {
                companyId: 1,
                id: "4",
                label: "環(huán)球中心",
                parentId: "3",
                value: "4"
            }
        ]
        // 扁平數(shù)據(jù)轉(zhuǎn)換樹狀數(shù)據(jù)
        function buildTree(list, rootID = "0") {
            let root = null;
            if (list && list.length) {
                root = {
                    id: rootID,
                    parentId: null,
                    children: []
                };
                const group = {};
                for (let index = 0; index < list.length; index += 1) {
                    if (list[index].parentId !== null && list[index].parentId !== undefined) {
                        if (!group[list[index].parentId]) {
                            group[list[index].parentId] = [];
                        }
                        group[list[index].parentId].push(list[index]);
                    }
                }
                const queue = [];
                queue.push(root);
                while (queue.length) {
                    const node = queue.shift();
                    node.children = group[node.id] && group[node.id].length ? group[node.id] : [];
                    if (node.children) {
                        Array.prototype.push.apply(queue, node.children);
                    }
                }
            }
            return root;
        }
        // 通過id找父id(包括自己)
        function getParentIdList(array, id) {
            let parentArray = [];

            if (array.length === 0) {
                return parentArray;
            }

            const recursion = function (arrayNew, id) {
                for (let i = 0; i < arrayNew.length; i++) {
                    let node = arrayNew[i];
                    if (node.id === id) {
                        parentArray.unshift(id);
                        recursion(array, node.parentId);
                        break;
                    } else {
                        if (!!node.children) {
                            recursion(node.children, id);
                        }
                    }
                }
                return parentArray;
            }
            let arrayNew = array;
            parentArray = recursion(arrayNew, id);
            return parentArray;
        }
        let arr = buildTree(JSON.parse(JSON.stringify(city2)), '-99')
        console.log('arr', arr)
        console.log('getParentIdList', getParentIdList(arr.children, '3'))
    </script>
</html>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笙蒙,一起剝皮案震驚了整個(gè)濱河市抵屿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捅位,老刑警劉巖轧葛,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異艇搀,居然都是意外死亡尿扯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門焰雕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衷笋,“玉大人,你說我怎么就攤上這事矩屁”僮冢” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵吝秕,是天一觀的道長泊脐。 經(jīng)常有香客問我,道長烁峭,這世上最難降的妖魔是什么容客? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上耘柱,老公的妹妹穿的比我還像新娘如捅。我一直安慰自己,他們只是感情好调煎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布镜遣。 她就那樣靜靜地躺著,像睡著了一般士袄。 火紅的嫁衣襯著肌膚如雪悲关。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天娄柳,我揣著相機(jī)與錄音寓辱,去河邊找鬼。 笑死赤拒,一個(gè)胖子當(dāng)著我的面吹牛秫筏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挎挖,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼这敬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蕉朵?” 一聲冷哼從身側(cè)響起崔涂,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎始衅,沒想到半個(gè)月后冷蚂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汛闸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年蝙茶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛉拙。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尸闸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出孕锄,到底是詐尸還是另有隱情吮廉,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布畸肆,位于F島的核電站宦芦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏轴脐。R本人自食惡果不足惜调卑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一抡砂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恬涧,春花似錦注益、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至提揍,卻和暖如春啤月,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背劳跃。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工谎仲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刨仑。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓郑诺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贸人。 傳聞我的和親對象是個(gè)殘疾皇子间景,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

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