Javascript 具有深嵌套的对象映射
我有一个目标:Javascript 具有深嵌套的对象映射,javascript,arrays,object,Javascript,Arrays,Object,我有一个目标: const object = { children: [{ uuid: '1', children: [{ uuid: '2', children: [{ uuid: '3', children: [] }, { uuid: '4', children: [{ uui
const object = {
children: [{
uuid: '1',
children: [{
uuid: '2',
children: [{
uuid: '3',
children: []
},
{
uuid: '4',
children: [{
uuid: '5',
children: []
}]
}
]
},
{
uuid: '6',
children: []
}
]
}]
}
我需要一个映射每个孩子的函数:
Javascript
deepMapChildren(object, (child) => ({...child, uuid: 'new uuid'}))
是否有人为此编写了脚本或知道一种内置方法?此解决方案在每个子项上递归调用
deepMapChildren
,以更新子项及其子项。该函数使用rest的destructuring将子项
与当前子项分开。然后,它将回调cb
的结果传播到子级,并使用deepMapChildren
映射子级
const deepMapChildren=(obj,cb,childrenKey='children')=>{
const{[childrenKey]:children=[],…child}=cb(obj);//更新子项,并将子项的内容与其子项分开
返回{
小孩
[childrenKey]:children.map(c=>deepMapChildren(c,cb))//映射子对象(如果有)
};
}
const object={“children”:[{“uuid”:“1”,“children”:[{“uuid”:“2”,“children”:[{“uuid”:“3”,“children”:[]},{“uuid”:“4”,“children”:[{“uuid”:“5”,“children”:[]}]},{“uuid”:“6”,“children”:[]}]}
const result=deepMapChildren(对象,(子对象)=>
({…子,uuid:'新uuid'})
)
console.log(result)
感谢您提供了优雅的解决方案,但它并不适用于所有情况。欢迎使用。在不了解案例的情况下,很难为所有案例设计一些东西。它失败了吗?deepMapChildren(state,(node)=>{if(node.uuid==parentId){return{…node,children:[…node.children,newElement],};}return node;});node.children是未定义的hanks,但当我在回调中推送新的子节点时,它仍然不起作用:deepMapChildren(state,(node)=>{if(node.uuid===parentId){return{…node,children:[…node.children,newElement],};}return node;}在尝试操作它之前需要检查节点是否有子节点-if(node.uuid==parentId&&node.children)