簡體   English   中英

使用深度嵌套的對象/數組 javascript 創建包含父母和孩子的數組

[英]Create array with parents and childs with deep nested object/array javascript

我想在 mysql 表中存儲以下與 (DAD,SON) 表的關系,如下所示:

| DAD    || SON    |
| mike.  || june   |
| mike   || michael|
| june   || elias  |
| june   || pepe   |

等等...

我有一個未知深度的嵌套 object 看起來像這樣:

const originalObject = {
      Dad: 'mike',
      sons: [
        {
          dad: 'june',
          sons: [
            {
              dad: 'elias',
            },
            {
              dad: 'pepe',
            },
          ],
        },
        {
          dad: 'michael',
          sons: [
            {
              dad: 'elias',
            },
            {
              dad: 'janister',
            },
            {
              dad: 'pepe',
              sons: [
                {
                  dad: 'lester',
                },
              ],
            },
          ],
        },
      ],
    };

我怎樣才能制作一個看起來像這樣的數組:

const desiredArray = [
    ['mike', 'june'],
    ['mike', 'michael'],
    ['june', 'elias'],
    ['june', 'elias'],
    etc,]

我已經將 object 轉換為數組,但我不確定它是否有幫助......現在的數組就像:

const parsedObjectToArray =[ 'mike',[ [ 'june', [elias, pepe] ], [ 'michael', [elias, janister, pepe] ] ] ];

那么,基於 originalObject 或 parsedObjectToArray,我如何將其中一個轉換為所需的Array? 我已經搜索過,但我很努力! 謝謝!

您可以使用遞歸 function 向下潛入 object 並添加到整個dads數組。

const dads = [];

function addToDads(obj) {
  obj.sons.forEach(son => {
    dads.push([obj.dad, son.dad]);
    if (son.sons) {
      addToDads(son);
    }
  })
}

addToDads(originalObject);

console.log(dads);

請參閱下面的實際操作:

 const originalObject = { dad: 'mike', sons: [ { dad: 'june', sons: [ { dad: 'elias', }, { dad: 'pepe', }, ], }, { dad: 'michael', sons: [ { dad: 'elias', }, { dad: 'janister', }, { dad: 'pepe', sons: [ { dad: 'lester', }, ], }, ], }, ], }; const dads = []; function addToDads(obj) { obj.sons.forEach(son => { dads.push([obj.dad, son.dad]); if (son.sons) { addToDads(son); } }) } addToDads(originalObject); console.log(dads);

您可以使用Array#flatMap進行遞歸。

 const getRelatives= ({ dad, sons = [] }) => sons.flatMap(son => [ [dad, son.dad], ...getRelatives(son) ]), object = { dad: 'mike', sons: [{ dad: 'june', sons: [{ dad: 'elias' }, { dad: 'pepe' }] }, { dad: 'michael', sons: [{ dad: 'elias' }, { dad: 'janister' }, { dad: 'pepe', sons: [{ dad: 'lester' }] }] }] }, result = getRelatives(object); console.log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM