如何在JavaScript中将普通对象数组转换为多级数组? [英] How can I convert normal array of objects to multilevel array in javascript?

查看:140
本文介绍了如何在JavaScript中将普通对象数组转换为多级数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

My normal array object like this :

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

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

I want to convert the object array to be like this :

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分隔

It seems it will be separated using key parent_id

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

But i'm still confused to implement it

我该如何转换数组对象?

How can I convert the array object like that?

请帮助我

推荐答案

  1. .filter() b,因此它仅包含带有parent_id: null
  2. 的项目
  3. .map() 剩余的物品,给他们分配孩子
  4. .map() 每个根级父级的子级不带parent_id字段(可选,不在示例中)返回它们
  1. .filter() the b so it contains only items with parent_id: null
  2. .map() remaining items, assigning children to them
  3. .map() children for each of the root level parents to return them without parent_id field (optional, not in the example)

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中将普通对象数组转换为多级数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆