首页 > 解决方案 > 如何将对象数组转换为嵌套对象?

问题描述

你好我试着得到这个输出

{
    name: "Saviole",
    role: "ceo",
    children: [
        {
            name: "Mary",
            role: "supervisorA",
            children: [
                {name: "Anna", role: "worker"}
                ]
        }, {
            name: "Louis",
            role: "supervisorB"
        }]
}

这些是我写的函数:

const users = [ 
  {name: "Anna", role: "worker"},
  { name: "Mary", role: "supervisorA" },
  { name: "Louis", role: "supervisorB" },  
  { name: "Saviole", role: "ceo" }
  ];

const recursiveAddToTree = (parent, child, grandChildren, users)=>{
  let tree = {};
users.forEach(( user)=>{
if(user.role===parent){
   tree ={...user}
} else if(user.role===child){
 tree = {...tree, chidren:[...[user]]}
} else {
 users.forEach(userChild=>{ 
   if(userChild.role===child){
   tree = {...tree, children:[...[{...userChild, chidren: [...[user]]}]]}
   }
 })
}
})
return tree;
}

const createSchema = users =>{
return recursiveAddToTree("ceo", "supervisorA","worker", users)
}

我该如何解决这个问题?我不明白为什么它不像想象的那样工作

标签: javascriptarraysreactjsobjectjavascript-objects

解决方案


我在您的代码中看到了 2 个问题:

  • foreach 将一个一个地处理用户,最后一个完成:CEO。但是在您的代码中,如果处理的用户是首席执行官,您的树对象将被用户替换,因此您之前的所有修改都将被删除(我认为这是最重要的问题)
  • 主管的角色是“supervisorA”和“supervisorB”,但是你正在检查角色是否是“supervisor”,它永远不会匹配,你应该检查角色是否以“supervisor”开头

推荐阅读