Javascript 从父项的键获取值,并将其传递给对象中的子项键

Javascript 从父项的键获取值,并将其传递给对象中的子项键,javascript,arrays,object,Javascript,Arrays,Object,我的结构如下: { 0: [{ "id": "1", "parentId": "root", "path": "root" "children": [{ "id": "2", "parentId": "1", "path": "1/2", "children": [ "id": "4", "parentId": "2", "path": "2/4" ]

我的结构如下:

{
  0: [{
    "id": "1",
    "parentId": "root",
    "path": "root"
    "children": [{
      "id": "2",
      "parentId": "1",
      "path": "1/2",
      "children": [
        "id": "4",
        "parentId": "2",
        "path": "2/4"
      ]
    }, {
      "id": "3",
      "parentId": "1",
      "path": "1/3"
    }]
  }]
}
我有键
“path”
,现在它是
“parentId/id”
,但我希望有从root到这个元素的路径,所以它应该看起来是
“root/parentId/id/parentId/it…”
等等。例如路径:
“root/1/2/4”


如何在键
“path”
中动态放置一个值以获得根元素的完整路径?

您需要识别根节点并从其路径开始

然后将每个连续的子id添加到路径末尾

让obj={
0: [{
“id”:“1”,
“父ID”:“根”,
“路径”:“根”,
“儿童”:[{
“id”:“2”,
“parentId”:“1”,
“路径”:“1/2”,
“儿童”:[{
“id”:“4”,
“parentId”:“2”,
“路径”:“2/4”
}]
}, {
“id”:“3”,
“parentId”:“1”,
“路径”:“1/3”
}]
}]
};
console.log(getRoute(obj[0][0],true));//识别根
函数getRoute(节点,isRoot){
返回节点!=null
?(isRoot)
?(node.path+“/”)
: ''
)+node.id+(node.children)
?“/”+getRoute(node.children[0],false)
: '')
: '';
}
递归解决方案:

updatePath(array, 'root');

function updatePath(array, path) {
    array.forEach((element, i) => {
        element.path = path + '/' + (i + 1);
        if(element.hasOwnProperty('children')) {
           updatePath(element.children, element.path);
        } 
    });
}

您的数据结构不考虑每个元素的童年,但考虑到这不是问题的一部分,这里有一个简单的递归解决方案:

updatePath(array, 'root');

function updatePath(array, path) {
    array.forEach((element, i) => {
        element.path = path + '/' + (i + 1);
        if(element.hasOwnProperty('children')) {
           updatePath(element.children, element.path);
        } 
    });
}
const数据=[{
“id”:“1”,
“父ID”:“根”,
“路径”:“根”,
“儿童”:[{
“id”:“2”,
“parentId”:“1”,
“路径”:“1/2”,
“儿童”:[{
“id”:“4”,
“parentId”:“2”,
“路径”:“2/4”
}
]
}, {
“id”:“3”,
“parentId”:“1”,
“路径”:“1/3”
}
]
},
{
“id”:“4”,
“parentId”:“2”,
“路径”:“2/4”
}
];
函数赋值路径(树、索引、数组、当前路径){
tree.path=currentPath | |“root”;
tree.children&&tree.children.forEach(child=>{
assignPath(child,null,null,`${tree.path}/${child.id}`);
});
}
data.forEach(assignPath);

控制台日志(数据)非常感谢!这是一个很好的解决方案。