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

如何在javascript中将普通的对象数组转换为多级数组?[重复]

能可人
2023-03-14

我的普通数组对象是这样的:

var b = [
    {id: 1, name: 'England',parent_id: null},
    {id: 2, name: 'Spain',parent_id: null},
    {id: 3, name: 'Chelsea',parent_id: 1},
    {id: 4, name: 'Manchester United',parent_id: 1},
    {id: 5, name: 'Real Madrid',parent_id: 2},
    {id: 6, name: 'Barcelona',parent_id: 2},
    {id: 7, name: 'Hazard',parent_id: 3},
    {id: 8, name: 'Morata',parent_id: 3},
    {id: 9, name: 'Pogba',parent_id: 4},
    {id: 10, name: 'Lukaku',parent_id: 4},
    {id: 11, name: 'Ronaldo',parent_id: 5},
    {id: 12, name: 'Bale',parent_id: 5},
    {id: 13, name: 'Messi',parent_id: 6},
    {id: 14, name: 'Suarez',parent_id: 6},
];

我想把对象数组转换成这样:

var b = [
    {
        name: 'England',
        children: [
            {
                name: 'Chelsea',
                children: [
                    {name: 'Hazard'},
                    {name: 'Morata'}
                ]
            },
            {
                name: 'Manchester United',
                children: [
                    {name: 'Pogba'},
                    {name: 'Lukaku'}
                ]
            }
        ]
    },
    {
        name: 'Spain',
        children: [
            {
                name: 'Real Madrid',
                children: [
                    {name: 'Ronaldo'},
                    {name: 'Bale'}
                ]
            },
            {
                name: 'Barcelona',
                children: [
                    {name: 'Messi'},
                    {name: 'Suarez'}
                ]
            },
        ]
    }
];

似乎将使用关键字parent_id来分隔它

但我仍然对实现它感到困惑

如何像那样转换数组对象?

请帮帮我

共有1个答案

嵇光临
2023-03-14
  1. . filter()theb因此它只包含具有parent_id的项目:null
  2. . map()剩余项,将子项分配给它们
  3. . map()每个根级别父级的子级返回它们,没有parent_id字段(可选,不在示例中)
var b = [
    {id: 1, name: 'England',parent_id: null},
    {id: 2, name: 'Spain',parent_id: null},
    {id: 3, name: 'Chelsea',parent_id: 1},
    {id: 4, name: 'Manchester United',parent_id: 1},
    {id: 5, name: 'Real Madrid',parent_id: 2},
    {id: 6, name: 'Barcelona',parent_id: 2},
    {id: 7, name: 'Hazard',parent_id: 3},
    {id: 8, name: 'Morata',parent_id: 3},
    {id: 9, name: 'Pogba',parent_id: 4},
    {id: 10, name: 'Lukaku',parent_id: 4},
    {id: 11, name: 'Ronaldo',parent_id: 5},
    {id: 12, name: 'Bale',parent_id: 5},
    {id: 13, name: 'Messi',parent_id: 6},
    {id: 14, name: 'Suarez',parent_id: 6},
];

const done = b.filter(person => !person.parent_id).map(person => {

  return {
    id      : person.id,
    name    : person.name,
    children: b.filter(child => child.parent_id == person.id)
  }

});

console.log(done);
 类似资料:
  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 JavaScript中的对象是一个奇怪的疣-在大多数情况下,它的行为就像一个数组,但实际上不是数组对象。因为它是真正的完全是另一回事,它没有从有用的功能类似,,,和。 使用一个简单的for循环从arguments对象构造新数组非常容易。例如,此函数对其参数进行排序: 但是,仅获

  • 本文向大家介绍如何在JavaScript中将arguments对象转换为数组?,包括了如何在JavaScript中将arguments对象转换为数组?的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中使用Array.from()方法将arguments对象转换为数组 示例

  • 我使用表单submit 现在,我想把这个数组转换成PHP数组,像这样 $汽车=数组(沃尔沃,宝马,丰田); 所以,这就是我所尝试的: 但它不起作用。看起来我无法将变量放在这里 但是,如果不是将变量放入,而是手动放入的输出,则其工作方式类似于: 解决办法是什么?

  • 我正在php控制器中运行一个数据库查询,并将结果返回给一个Ajax函数。下面是php代码。 下面是我在ajax中的函数: 我的问题是如何将返回的json对象转换为javascript数组。

  • 问题内容: 转换的最佳方法是什么: 至: 问题答案: ECMAScript 6引入了易于填充的内容: 该方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 数组的自身属性不会被复制,因为它无法枚举。 另外,您可以使用ES6 传播语法来达到相同的结果: