当前位置: 首页 > 知识库问答 >
问题:

使用深嵌套对象/数组javascript创建带有父项和子项的数组

鲁向明
2023-03-14

我想在一个mysql表中存储以下与一个(爸爸,儿子)表的关系,该表看起来如下所示:

| 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,如何将其中之一转换为DesireDarray?我已经找过了,但我在努力奋斗!谢谢!

共有2个答案

谷涵容
2023-03-14

您可以使用数组#flatmap进行递归。

null

js lang-js prettyprint-override">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; }
钱安和
2023-03-14

您可以使用递归函数,该函数将对象下潜并添加到整体的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);

请参阅以下操作:

null

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);
 类似资料:
  • 问题内容: 我的数组是这样的: 我想将其转换为: 因此,基本上,分组依据。 我尝试着: 我只是不知道如何处理相似组值的分组。 问题答案: 首先,在JavaScript中,使用遍历数组通常不是一个好主意。 因此,您可以尝试执行以下操作: 在这里使用中间对象有助于加快处理速度,因为它可以避免嵌套循环搜索数组。另外,因为使用迭代遍历对象(而不是数组)是合适的。 附录 FWIW,如果要避免在结果数组中出现

  • 我的数组是这样的: 我想把这个转换成: 所以,基本上,按分组。 我正在尝试: 我只是不知道如何处理相似组值的分组。

  • 我使用的是OpenApi规范,这是生成类的代码示例: 我想禁止发送以下请求: 如果我使用了它看起来像: 有什么方法可以使用文件做同样的事情吗?

  • 问题内容: 我正在尝试基于一些嵌套对象来过滤数组。 输入数组如下所示: 我希望这种情况的输出如下所示: 我正在使用此公式来做到这一点: 输出几乎是好的,但它返回的对象带有所有带有姓氏的对象(最好检查一下小提琴:D),而不是将其删除。我如何改善过滤? 问题答案: 调用之后,您需要将结果通过管道传递到,如下所示: 我在这里假设您不想操纵原始数组。因此,我正在使用Object.assign。

  • 问题内容: 我需要从查询创建一个JSON输出,该查询使用具有一对多关系的两个表之间的内部联接。 我希望将辅助表的值作为主表的数组属性嵌套。 考虑以下示例: 并查询: 这将打印以下JSON: 但是,我希望将pets数据作为所有者数据中的数组存储: 我怎样才能做到这一点? 问题答案: 您可以使用以下查询:

  • 我有一个函数返回包含2个数组的2个数组。 这些嵌套数组每个包含6个对象 我正在尝试迭代每个主2数组,并按类别返回嵌套数组的求和值,如下所示:记住,值当前是一个字符串。 我已经尝试了下面的,但我似乎不能得到它的权利,我看了许多这样的线程,我知道有吨类似的,但没有任何工作为我目前为止。蒂娅。 我可怜的尝试。