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

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

如何通過javascript將父子數(shù)組轉(zhuǎn)換為json樹結(jié)構(gòu)

如何通過javascript將父子數(shù)組轉(zhuǎn)換為json樹結(jié)構(gòu)

慕俠2389804 2023-06-09 17:40:22
我有一個(gè)對(duì)象數(shù)組,想通過 java 腳本函數(shù)將其轉(zhuǎn)換為 JSON 樹結(jié)構(gòu),然后在 vue js 項(xiàng)目中使用它。該頁(yè)面有一個(gè)需要 JSON 樹結(jié)構(gòu)的 vuetify 樹組件。我的數(shù)據(jù)已存儲(chǔ)在具有父子結(jié)構(gòu)的 MySql 表中。采樣日期:[    {"id": 123, "parentid": 0, "name": "Mammals"},    {"id": 456, "parentid": 123, "name": "Dogs"},    {"id": 214, "parentid": 456, "name": "Labradors"},    {"id": 810, "parentid": 456, "name": "Pugs"},    {"id": 919, "parentid": 456, "name": "Terriers"}]結(jié)果 :[    {        "id": 123,        "parentid": 0,        "name": "Mammals",        "children": [            {                "id": 456,                "parentid": 123,                "name": "Dogs",                "children": [                    {                        "id": 214,                        "parentid": 456,                        "name": "Labradors"                    },                    {                        "id": 810,                        "parentid": 456,                        "name": "Pugs"                    },                    {                        "id": 919,                        "parentid": 456,                        "name": "Terriers"                    }                ]            }        ]    }]來自這個(gè)地址的示例數(shù)據(jù):https ://gist.github.com/smrchy/7040377
查看完整描述

2 回答

?
qq_笑_17

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

您可以reduce使用一個(gè)對(duì)象對(duì)數(shù)組執(zhí)行操作來存儲(chǔ)對(duì)每個(gè)對(duì)象的引用(用于添加子對(duì)象)和一個(gè)數(shù)組來存儲(chǔ)結(jié)果。


const arr = [

    {"id": 123, "parentid": 0, "name": "Mammals"},

    {"id": 456, "parentid": 123, "name": "Dogs"},

    {"id": 214, "parentid": 456, "name": "Labradors"},

    {"id": 810, "parentid": 456, "name": "Pugs"},

    {"id": 919, "parentid": 456, "name": "Terriers"}

];

const {res} = arr.reduce((acc,curr)=>{

  if(acc.parentMap[curr.parentid]){

    (acc.parentMap[curr.parentid].children = 

           acc.parentMap[curr.parentid].children || []).push(curr);

  } else {

    acc.res.push(curr);

  }

  acc.parentMap[curr.id] = curr;

  return acc;

}, {parentMap: {}, res: []});

console.log(res);


查看完整回答
反對(duì) 回復(fù) 2023-06-09
?
www說

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

我發(fā)現(xiàn)更容易理解:

  • 創(chuàng)建數(shù)組中所有可能 id 的對(duì)象/字典,以及

  • 然后在將孩子附加到父母后通過字典:

const array = [

? ? ? { id: 919, parentid: 456, name: "Terriers" },

? ? ? { id: 456, parentid: 123, name: "Dogs" },

? ? ? { id: 214, parentid: 456, name: "Labradors" },

? ? ? { id: 810, parentid: 456, name: "Pugs" },

? ? ? { id: 123, parentid: 0, name: "Mammals" },

? ? ];

? ??

? ? let tree = [], arrayDictionary = {};

? ??

? ? // First map the nodes of the array to an object/dictionary where the key is their id

? ? array.forEach((cat) => {

? ? ? arrayDictionary[cat.id] = cat;

? ? ? arrayDictionary[cat.id]["children"] = [];

? ? });

? ??

? ??

? ? // for each entry in the dictionary

? ? for (var entry in arrayDictionary) {


? ? ? // get all the data for this entry in the dictionary

? ? ? const mappedElem = arrayDictionary[entry];


? ? ? // if the element has a parent, add it

? ? ? if (

? ? ? ? mappedElem.parentid && // the dictionary has a parent

? ? ? ? arrayDictionary[mappedElem["parentid"]] // and that parent exists

? ? ? ? ) {


? ? ? ? arrayDictionary[mappedElem["parentid"]]["children"].push(mappedElem);

? ? ? }

? ? ? // else is at the root level (parentid = null or 0)

? ? ? else {

? ? ? ? tree.push(mappedElem);

? ? ? }

? ? }

? ??

? ? console.log(tree);


?


查看完整回答
反對(duì) 回復(fù) 2023-06-09
  • 2 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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