请教一个简单的js数组转对象问题

var menuArray=[
    { id: 1, name: "统计内容", pid: 0 },
    { id: 2, name: "产品部", pid: 1 },
    { id: 3, name: "UE", pid: 2 },
    { id: 4, name: "产品", pid: 2 },
    { id: 5, name: "研发部", pid: 1 },
    { id: 6, name: "前端", pid: 5 },
    { id: 7, name: "Java", pid: 5 },
    { id: 8, name: "测试部", pid: 1 },
    { id: 9, name: "测试1", pid: 8 },
    { id: 10, name: "测试2", pid: 8 }
];

通过操作,把上面数据转成下面数据

var data=[{
    id:0,
    name: "统计内容",
    item:[{
            id: 2,
            name: '产品部',
            item: [
                {
                    id:3,
                    name: 'UE'
                },
                {
                    id:4,
                    name: '产品'
                }
            ]
        },
        {
            id: 5,
            name: '研发部',
            item: [
                {
                    id:6,
                    name: '前端'
                },
                {
                    id:7,
                    name: 'Java'
                }
            ]
        },
        {
            id: 8,
            name: '测试部',
            item: [
                {
                    id:9,
                    name: '测试1'
                },
                {
                    id:10,
                    name: '测试2'
                }
            ]
        }
    ]
}]

注意:数据深度不定

阅读 1.6k
1 个回答
var menuArray=[
    { id: 1, name: "统计内容", pid: 0 },
    { id: 2, name: "产品部", pid: 1 },
    { id: 3, name: "UE", pid: 2 },
    { id: 4, name: "产品", pid: 2 },
    { id: 5, name: "研发部", pid: 1 },
    { id: 6, name: "前端", pid: 5 },
    { id: 7, name: "Java", pid: 5 },
    { id: 8, name: "测试部", pid: 1 },
    { id: 9, name: "测试1", pid: 8 },
    { id: 10, name: "测试2", pid: 8 }
];

let menuDict = menuArray.reduce((t, c)=> [c.item=[], t['' + c.id] = c, t][2], {});

let result =  menuArray.reduce((t, c)=>{
    if(menuDict[c.pid]) {
        menuDict[c.pid].item.push(c);
    } else {
        t.push(c)
    }
    return t 
}, [])

console.log(result);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题