【问题标题】:Create array with parents and childs with deep nested object/array javascript使用深度嵌套的对象/数组javascript创建包含父母和孩子的数组
【发布时间】:2021-06-11 23:13:59
【问题描述】:

我想在 mysql 表中存储以下与 (DAD,SON) 表的关系,如下所示:

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

等等……

我有一个未知深度的嵌套对象,它看起来像这样:

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,]

我已经将对象转换为数组,但我不确定它是否有帮助...现在的数组是这样的:

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

那么,基于 originalObject 或 parsedObjectToArray,我如何将其中一个转换为所需的Array?我已经搜索过,但我很努力!谢谢!

【问题讨论】:

  • 奇怪的家庭...只是爸爸...
  • @NinaScholz 是的 :D 只是为了让可视化更简单

标签: javascript mysql arrays object nested


【解决方案1】:

您可以使用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; }

【讨论】:

  • 这个答案看起来也很棒!谢谢! ^^
【解决方案2】:

您可以使用递归函数深入对象并添加到整个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);

【讨论】:

  • 看起来这正是我要找的!你真棒!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
相关资源
最近更新 更多