首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用特定对象的字段值组织对象数组

使用特定对象的字段值组织对象数组
EN

Stack Overflow用户
提问于 2022-05-28 07:53:47
回答 1查看 37关注 0票数 0

我有一个对象数组,结构如下所示

const data ={深度:0,id:1,name:"data 1“},{埋深:0,id:2,name:"data 2”},{埋深:0,id:3,name:"data 3“},{埋深:1,id:11,name:"data 11",parentid:1,},{埋深:1,id:12,name:"data 12",parentid:1,},{埋深:1,id:21,name:"data 21",parentid:2,},}{深度:1,id:31,名称:“data 31",父母:3,},{埋深:2,id:111,名称:”data 111",父母:11,},{深度:2,id:112,name:"data 112",parentid:11,},{埋深:2,id:113,name:"data 113",parentid:11,},{埋深:2,id:121,name:"data 121",parentid:12,},{埋深:2,id:122,名称:“data 122",父母:12,},{深度:2,id:211,名称:”data 211",父母:21,},{深度:3,id:2111,名称:“data 2111",父母:211,},{埋深:3,id:2112,名称:”data 2112",parentid:211,}

我要输出如下所示

代码语言:javascript
运行
复制
const output= [
    {
        depth:0,
        id:1,
        name:"data 1",
        childs:[
            {
                depth:1,
                id:11,
                name:"data 11",
                parentid:1,
                childs:[
                    {
                        depth:2,
                        id:111,
                        name:"data 111",
                        parentid:11,
                    },
                    {
                        depth:2,
                        id:112,
                        name:"data 112",
                        parentid:11,
                    },
                    {
                        depth:2,
                        id:113,
                        name:"data 113",
                        parentid:11,
                    },
                ]
            },
            {
                depth:1,
                id:12,
                name:"data 12",
                parentid:1,
                childs:[
                    {
                        depth:2,
                        id:121,
                        name:"data 121",
                        parentid:12,
                    },
                    {
                        depth:2,
                        id:122,
                        name:"data 122",
                        parentid:12,
                    },
                ]
            },
        ]
    },
    {
        depth:0,
        id:2,
        name:"data 2",
        childs:[
            {
                depth:1,
                id:21,
                name:"data 21",
                parentid:2,
                childs:[
                    {
                        depth:2,
                        id:211,
                        name:"data 211",
                        parentid:21,
                        childs:[
                            {
                                depth:3,
                                id:2111,
                                name:"data 2111",
                                parentid:211,
                            },
                            {
                                depth:3,
                                id:2112,
                                name:"data 2112",
                                parentid:211,
                            },
                        ]
                    }
                ]
            }
        ]
    },
    {
        depth:0,
        id:3,
        name:"data 3",
        childs:[
            {
                depth:1,
                id:31,
                name:"data 31",
                parentid:3,
            },
        ]
    },
]

  1. 实现这一输出的关键因素是深度,id,parentid
  2. 每个子数组的对象的父母都应该匹配他们的父id。我已经尝试了一些映射,过滤器,循环方法,但它并不像我预期的那样起作用。如何在Javascript中实现此输出?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-28 08:43:21

你可以做这样的事

代码语言:javascript
运行
复制
const createTree = data => {
  const initials = data.filter(d => !d.parentid)
  
  const loop = (item) => {
    const childs = data.filter(d => d.parentid === item.id)
    
    if(!childs.length){
      return item
    }
    
    return {
      ...item,
      childs: childs.map(loop)
    }
  }
  
  
  return initials.map(loop)
  
}




const data = [ { depth:0, id:1, name:"data 1" }, { depth:0, id:2, name:"data 2" }, { depth:0, id:3, name:"data 3" }, { depth:1, id:11, name:"data 11", parentid:1, }, { depth:1, id:12, name:"data 12", parentid:1, }, { depth:1, id:21, name:"data 21", parentid:2, }, { depth:1, id:31, name:"data 31", parentid:3, }, { depth:2, id:111, name:"data 111", parentid:11, }, { depth:2, id:112, name:"data 112", parentid:11, }, { depth:2, id:113, name:"data 113", parentid:11, }, { depth:2, id:121, name:"data 121", parentid:12, }, { depth:2, id:122, name:"data 122", parentid:12, }, { depth:2, id:211, name:"data 211", parentid:21, }, { depth:3, id:2111, name:"data 2111", parentid:211, }, { depth:3, id:2112, name:"data 2112", parentid:211, }]

const tree = createTree(data)

console.log(tree)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72413895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档