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

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

使用 Lodash 從 JSON 數(shù)據(jù)創(chuàng)建導(dǎo)航欄菜單

使用 Lodash 從 JSON 數(shù)據(jù)創(chuàng)建導(dǎo)航欄菜單

溫溫醬 2022-10-08 10:15:56
我正在嘗試從 JSON 數(shù)據(jù)創(chuàng)建導(dǎo)航欄菜單。實(shí)際上我已經(jīng)實(shí)現(xiàn)了它,但我正在尋找反饋不要打電話getItems兩次?如何改進(jìn)我的代碼?謝謝var _ = require('lodash');let menuConfig = [    {        ID: 1,        TAG: "M:A",        PARENT_TAG: "MAIN",        TITLE: "A Title"    },    {        ID: 2,        TAG: "AS1",        PARENT_TAG: "M:A",        TITLE: "A Subtitle 1"    },    {        ID: 3,        TAG: "AS2",        PARENT_TAG: "M:A",        TITLE: "A Subtitle 2"    },    {        ID: 4,        TAG: "AS3",        PARENT_TAG: "M:A",        TITLE: "A Subtitle 3"    },    {        ID: 5,        TAG: "M:B",        PARENT_TAG: "MAIN",        TITLE: "B Title"    },    {        ID: 6,        TAG: "BS1",        PARENT_TAG: "M:B",        TITLE: "B Subtitle 1"    },    {        ID: 7,        TAG: "BS2",        PARENT_TAG: "M:B",        TITLE: "B Subtitle 2"    },    {        ID: 8,        TAG: "M:C",        PARENT_TAG: "MAIN",        TITLE: "C Title"    },    {        ID: 8,        TAG: "CS1",        PARENT_TAG: "M:C",        TITLE: "C Subtitle 1"    }]function getMenu() {    let grouped = _.groupBy(menuConfig, "PARENT_TAG");    let menu = getItems(grouped.MAIN, grouped);    console.log(JSON.stringify(menu, null, 3));}function getItems(items, grouped) {    let subMenu = [];    _.forEach(items, (item) => {        let newItem = getItem(item, grouped)        if (newItem) {            subMenu.push(newItem);        }    });    return subMenu;}function getItem(item, grouped) {    if (grouped[item.TAG]) {        let subMenu = getItems(grouped[item.TAG], grouped);        if (subMenu && subMenu.length) {            return {                title: item.TITLE,                subMenu: subMenu            }        }    } else {        let newItem = {            title: item.TITLE        }        return newItem;    }}getMenu();輸出需要是這樣的;[  {    "title": "A Title",    "subMenu": [      {        "title": "A Subtitle 1"      },      {        "title": "A Subtitle 2"      },      {        "title": "A Subtitle 3"      }    ]  }, 
查看完整描述

1 回答

?
呼喚遠(yuǎn)方

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

這是另一個(gè)解決方案reduce:


const menuConfig = [{

  ID: 1,TAG: "M:A", PARENT_TAG: "MAIN", TITLE: "A Title"

}, {

  ID: 2, TAG: "AS1", PARENT_TAG: "M:A", TITLE: "A Subtitle 1"

}, {

  ID: 3, TAG: "AS2", PARENT_TAG: "M:A", TITLE: "A Subtitle 2"

}, {

  ID: 4, TAG: "AS3", PARENT_TAG: "M:A", TITLE: "A Subtitle 3"

}, {

  ID: 5, TAG: "M:B", PARENT_TAG: "MAIN", TITLE: "B Title"

}, {

  ID: 6, TAG: "BS1", PARENT_TAG: "M:B", TITLE: "B Subtitle 1"

}, {

  ID: 7, TAG: "BS2", PARENT_TAG: "M:B", TITLE: "B Subtitle 2"

}, {

  ID: 8, TAG: "M:C", PARENT_TAG: "MAIN", TITLE: "C Title"

}, {

  ID: 8, TAG: "CS1", PARENT_TAG: "M:C", TITLE: "C Subtitle 1"

}]


function getMenu() {

  const menu = getItems(menuConfig, 'MAIN');

  console.log(menu);

}


function getItems(items, grandParentTag) {

  const newItems = items.reduce((modifiedObj, currentItem) => {

    const parentTag = currentItem.PARENT_TAG;

    const tag = currentItem.TAG;


    if (!modifiedObj[grandParentTag]) {

      modifiedObj[parentTag] = {};

    }


    if (!modifiedObj[grandParentTag][parentTag]) {

      modifiedObj[parentTag][tag] = {

        title: currentItem.TITLE,

        subMenu: [],

      };

    } else {

      modifiedObj[grandParentTag][parentTag].subMenu.push({

        title: currentItem.TITLE,

      });

    }


    return modifiedObj;


  }, {});


  return Object.values(newItems[grandParentTag]);

}


getMenu();



查看完整回答
反對(duì) 回復(fù) 2022-10-08
  • 1 回答
  • 0 關(guān)注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報(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)