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

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

合并基于子數(shù)組索引的數(shù)組數(shù)組作為鍵(NodeJS/Javascript)

合并基于子數(shù)組索引的數(shù)組數(shù)組作為鍵(NodeJS/Javascript)

慕妹3242003 2023-12-14 14:36:24
如何編寫代碼以以下方式合并我的列表?性能很重要。我想轉(zhuǎn)換以下數(shù)組:"list": [    [        "marketing",        "page_sections",        "PageOne"    ],    [        "marketing",        "page_sections",        "PageTwo"    ],    [        "webapp",        "page",        "pageone"    ],    [        "webapp",        "page",        "pagetwo"    ],改成下面的格式:[       {     name: "marketing",     path: "marketing/",                children: [                    {                        name: "page_sections",                        path: "marketing/page_sections",                         children: [                            {                                name: "pageOne",                                path: "marketing/page_sections/pageOne",                                 children: []                            },                            {                                name: "pageTwo",                                path: "marketing/page_sections/pageTwo",                                 children: []                            },                       }           ],     },    {     name: "webapp",     path: "webapp/"     children: [                  {                    name: "page",                    path: "webapp/page/"                                        children: [                        {                            name: "pageone",                            path: "webapp/page/pageone"                            children: []                        },                        {                            name: "pagetwo",                            path: "webapp/page/pagetwo"                            children: []                        },                    }             ]     },]子數(shù)組的第一個(gè)索引是父級,第二個(gè)索引是父級的子級,第三個(gè)索引是第二個(gè)索引的子級(依此類推)。
查看完整描述

4 回答

?
MM們

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

最短的方法是迭代嵌套名稱并查找具有相同名稱的對象。如果不存在,則創(chuàng)建一個(gè)新對象。將數(shù)組返回children為新級別。

此方法的特點(diǎn)Array#reduce是迭代外部數(shù)組data和所有內(nèi)部數(shù)組。

const

? ? data = [["marketing", "page_sections", "PageOne"], ["marketing", "page_sections", "PageTwo"], ["webapp", "page", "pageone"], ["webapp", "page", "pagetwo"]],

? ? result = data.reduce((r, names) => {

? ? ? ? names.reduce((level, name, i, values) => {

? ? ? ? ? ? let temp = level.find(q => q.name === name),

? ? ? ? ? ? ? ? path = values.slice(0, i + 1).join('/') + (i ? '' : '/');

? ? ? ? ? ? if (!temp) level.push(temp = { name, path, children: [] });

? ? ? ? ? ? return temp.children;

? ? ? ? }, r);

? ? ? ? return r;

? ? }, []);


console.log(result);

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


查看完整回答
反對 回復(fù) 2023-12-14
?
嗶嗶one

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

查看來源以及您的預(yù)期結(jié)果。


我要做的是循環(huán)list,然后在列表中進(jìn)行另一個(gè)循環(huán)。將此與Array.find..混合


例如..


const data = {list:[

  ["marketing","page_sections","PageOne"],

  ["marketing","page_sections","PageTwo"],

  ["webapp","page","pageone"],

  ["webapp","page","pagetwo"]]};

  


function makeTree(src) {

  const root = [];

  for (const s of src) {

    let r = root;

    let path = '';

    for (const name of s) {

      path += `${name}/`;

      let f = r.find(k => k.name === name);

      if (!f) r.push(f = {name, path, children: []});

      r = f.children;

    }

  }

  return root;

}

   

console.log(makeTree(data.list));

.as-console-wrapper {

  min-height: 100%;

}


查看完整回答
反對 回復(fù) 2023-12-14
?
鴻蒙傳說

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

您可以執(zhí)行以下操作,


list= [

    [

        "marketing",

        "page_sections",

        "PageOne"

    ],

    [

        "marketing",

        "page_sections",

        "PageTwo"

    ],

    [

        "webapp",

        "page",

        "pageone"

    ],

    [

        "webapp",

        "page",

        "pagetwo"

    ],

  ];



getChildrenItem = (arr) => {

  if(arr.length === 1) {

    return { name: arr[0], children: []};

  } else {

    return { name: arr.splice(0,1)[0], children: [getChildrenItem([...arr])]};

  }

  

}


merge = (srcArr, newObj) => {

  const {name, children} = newObj;

  let index = srcArr.findIndex(item => item.name === name);

  if( index> -1) {

    children.forEach(item => merge(srcArr[index].children, item))

    return ;

  } else {

    srcArr.push(newObj);

    return;

  }

}


allObj = [];

list.forEach(item => {

  let tempObj = getChildrenItem([...item]);

  merge(allObj, tempObj);

});


console.log(allObj);


查看完整回答
反對 回復(fù) 2023-12-14
?
翻過高山走不出你

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

如果性能是一個(gè)問題,我認(rèn)為這是最好的解決方案之一。


let list = [

  ["marketing", "page_sections", "PageOne"],

  ["marketing", "page_sections", "PageTwo"],

  ["webapp", "page", "pageone"],

  ["webapp", "page", "pagetwo"],

];

const dt = {};

const pushToOBJ = (Object, name) => {

  if (Object[name]) return Object[name];

  Object[name] = {

    name,

    children: {},

  };

  return Object[name];

};


for (let i = 0; i < list.length; i++) {

  let subArray = list[i];

  let st = pushToOBJ(dt, subArray[0]);

  for (let j = 1; j < subArray.length; j++) {

    st = pushToOBJ(st.children, subArray[j]);

  }

}

let result = [];

const convertObjToChildArray = (obj) => {

  if (obj === {}) return [];


  let arr = Object.values(obj);

  for (let i = 0; i < arr.length; i++) {

    arr[i].children = convertObjToChildArray(arr[i].children);

  }

  return arr;

};

result = convertObjToChildArray(dt);

console.log(result);

沒有使用 JS find 函數(shù),該函數(shù)已經(jīng)具有 O(n) 復(fù)雜度。


查看完整回答
反對 回復(fù) 2023-12-14
  • 4 回答
  • 0 關(guān)注
  • 288 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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