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

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

使用對(duì)象重新生成源數(shù)組以遞歸地產(chǎn)生結(jié)果(JS)

使用對(duì)象重新生成源數(shù)組以遞歸地產(chǎn)生結(jié)果(JS)

猛跑小豬 2022-06-09 17:12:49
你好,我需要你的遞歸幫助。我有一個(gè)包含對(duì)象的源數(shù)組,我需要將它重新生成為結(jié)果數(shù)組視圖。需要改變一些數(shù)據(jù)結(jié)構(gòu)。我試過(guò)自己做,但現(xiàn)在沒(méi)有結(jié)果;(每個(gè)元素可能有一個(gè) parrent_id 字段,嵌套可以是無(wú)限的。我怎么能用遞歸做到這一點(diǎn)?const source = [  {    id: 1,    title: 'title1',    alias: 'alias1',    parent_id: null  },  {    id: 2,    title: 'title2',    alias: 'alias2',    parent_id: null  },  {    id: 3,    title: 'title3',    alias: 'alias3',    parent_id: 2  },  {    id: 4,    title: 'title4',    alias: 'alias4',    parent_id: 2  },  {    id: 5,    title: 'title5',    alias: 'alias5',    parent_id: 4  },  {    id: 6,    title: 'title6',    alias: 'alias6',    parent_id: 4  }];const result = [  {    id: 1,    alias: 'alias',    title: 'root cat',    link: '/',    Icon: 'icon'  },  {    id: 2,    alias: 'alias',    title: 'Nested Pages',    Icon: 'icon',    items: [      {        id: 3,        alias: 'alias',        title: 'sub cat for Nested Pages'      },      {        id: 4,        alias: 'alias',        title: 'sub cat for Nested Pages',        items: [          {            id: 5,            alias: 'alias',            title: 'sub sub cat '          },          {            id: 6,            alias: 'alias',            title: 'Level 3'          }        ]      }    ]  }];提前謝謝PS 這是我的代碼,它只適用于一級(jí)嵌套。如何解決它以遞歸使用?let finArray = [];const regenArray = (categories, parrent_id = null) => {  categories.map((el, index, array) => {    if (el.parent_id === parrent_id) {      finArray.push(el);      finArray[finArray.length - 1]['items'] = [];      categories.map(        (child_el, child_index, child_array) => {          if (el.id === child_el.parent_id) {            finArray[finArray.length - 1]['items'].push(              child_el            );          }          return false;        }      );    }  });};regenArray(categories);console.log('finArray', finArray);
查看完整描述

3 回答

?
郎朗坤

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

您不需要遞歸,只需要一個(gè)對(duì)象來(lái)保持對(duì)節(jié)點(diǎn)和父節(jié)點(diǎn)的引用。


這種方法也適用于未排序的數(shù)據(jù),因?yàn)樗瑫r(shí)使用了從項(xiàng)到父項(xiàng)和從父項(xiàng)到項(xiàng)的關(guān)系。


const

    source = [{ id: 1, title: 'title1', alias: 'alias1', parent_id: null }, { id: 2, title: 'title2', alias: 'alias2', parent_id: null }, { id: 3, title: 'title3', alias: 'alias3', parent_id: 2 }, { id: 4, title: 'title4', alias: 'alias4', parent_id: 2 }, { id: 5, title: 'title5', alias: 'alias5', parent_id: 4 }, { id: 6, title: 'title6', alias: 'alias6', parent_id: 4 }],

    tree = function (data, root) {

        var t = {};

        data.forEach(({ parent_id, ...o }) => {

            Object.assign(t[o.id] = t[o.id] || {}, o);

            t[parent_id] = t[parent_id] || {};

            t[parent_id].items = t[parent_id].items || [];

            t[parent_id].items.push(t[o.id]);

        });

        return t[root].items;

    }(source, null);


console.log(tree);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反對(duì) 回復(fù) 2022-06-09
?
長(zhǎng)風(fēng)秋雁

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

首先我正在嘗試一棵樹(shù),但在看到@nina-scholz答案之后。我決定以同樣的方式編寫(xiě)代碼ES6。


const source = [

  { id: 1, title: "title1", alias: "alias1", parent_id: null },

  { id: 2, title: "title2", alias: "alias2", parent_id: null },

  { id: 3, title: "title3", alias: "alias3", parent_id: 2 },

  { id: 4, title: "title4", alias: "alias4", parent_id: 2 },

  { id: 5, title: "title5", alias: "alias5", parent_id: 4 },

  { id: 6, title: "title6", alias: "alias6", parent_id: 4 }

];

const [result] = source.reduce(

  ([r, map], item) => {

    const d = { ...item, children: [] };

    const loc = map[item.parent_id];

    if (loc) {

      loc.children.push(d);

    } else {

      r.push(d);

    }

    map[item.id] = d;

    return [r, map];

  },

  [[], {}]

);

console.log(JSON.stringify(result, null, 4));

.as-console-row {color: blue!important}


查看完整回答
反對(duì) 回復(fù) 2022-06-09
?
陪伴而非守候

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

遍歷結(jié)果數(shù)組的每個(gè)對(duì)象。如果對(duì)象 id 與當(dāng)前對(duì)象的父 id 不匹配,則執(zhí)行遞歸調(diào)用以檢查其項(xiàng)目。


 function findParentAndPushChild(object,resArray){

    resArray.forEach( (child)=> {

    if(child.id == object.parent_id)child.items.push(object);

    else if(child.items.length!=0)findParentAndPushChild(object,child.items);

    });

 }

檢查以下代碼片段。


const source = [{  id: 1,title:'title1',alias:'alias1',parent_id: null},{id: 2,title:'title2',alias: 'alias2',parent_id: null},{id: 3,title:'title3',alias:'alias3',parent_id: 2},{ id: 4,title:'title4',alias:'alias4',parent_id: 2},{id: 5,title:'title5',alias:'alias5',parent_id: 4},{id: 6,title:'title6',alias:'alias6',parent_id: 4}

  ];

let resultArray=[];

source.map( obj =>{obj.items=[];return obj}).forEach(obj=>{

     if(obj.parent_id==null)resultArray.push(obj);

     else{

        let index=resultArray.findIndex( (resObj)=>resObj.id==obj.parent_id);

        if( index == -1)findParentAndPushChild(obj,resultArray) 

        else resultArray[index].items.push(obj);

        }

})

 function findParentAndPushChild(object,resArray){

    resArray.forEach( (child)=> {if(child.id == object.parent_id)child.items.push(object);

    else if(child.items.length!=0)findParentAndPushChild(object,child.items);

    });

 } 

 console.log(resultArray);

.as-console-wrapper { max-height: 100% !important; top: 0; }


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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