javascript - 如何将对象数组转换为嵌套对象?
问题描述
你好我试着得到这个输出
{
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)
}
我该如何解决这个问题?我不明白为什么它不像想象的那样工作
解决方案
我在您的代码中看到了 2 个问题:
- foreach 将一个一个地处理用户,最后一个完成:CEO。但是在您的代码中,如果处理的用户是首席执行官,您的树对象将被用户替换,因此您之前的所有修改都将被删除(我认为这是最重要的问题)
- 主管的角色是“supervisorA”和“supervisorB”,但是你正在检查角色是否是“supervisor”,它永远不会匹配,你应该检查角色是否以“supervisor”开头
推荐阅读
- python - 如何通过过滤自定义张量流损失函数?
- react-native - 当用户关闭应用程序时,React-Native Expo 发送 Firebase 帖子
- javascript - 使用 jQuery 跨浏览器捕获单击/更改下拉值,没有“请选择”默认选项
- azure - 将 azure cli 脚本转换为 azure powershell CLI 函数
- php - 检查与数组匹配的 IF 值 - PHP
- ios - 如何制作方形图像的 LazyVGrid?
- python-3.x - Matplotlib stackplot 区域颜色被否定
- python - 如何在 Python 中将数字列表转换为整数?
- python - 使用 Numpy Polyfit 进行曲线拟合,使用平方根估计函数的常数
- swift - SwiftUI NavigationView 显示不正确