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);
控制台日志(数据)代码>非常感谢!这是一个很好的解决方案。