【问题标题】:How can I convert normal array of objects to multilevel array in javascript? [duplicate]如何在javascript中将普通对象数组转换为多级数组? [复制]
【发布时间】:2018-03-22 08:48:03
【问题描述】:

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

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'}
                ]
            },
        ]
    }
];

好像会用key parent_id 分开

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

我怎样才能像这样转换数组对象?

请帮帮我

【问题讨论】:

    标签: javascript jquery arrays node.js object


    【解决方案1】:
    1. .filter() b 所以它只包含带有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);

    【讨论】:

    • 或者只是将其作为副本关闭...
    猜你喜欢
    • 2019-09-27
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 2020-12-28
    • 2021-06-07
    • 2020-09-12
    相关资源
    最近更新 更多