我正在尝试创建一棵包含数据库记录的树, 起初我使用了以下代码:
这工作正常,但由于我可以在数据库中插入和删除树的节点,因此该功能不再工作。 正如您所看到的,现在我可以拥有第一个 Id 为 90 且子元素宽度更小的 Id 的元素。
var arry = [{
"parentId": null,
"moduleId": 90
},
{
"parentId": 1,
"moduleId":65
},
{
"parentId": 1,
"moduleId": 91
},
{
"parentId": 65,
"moduleId": 66
},
{
"parentId": 66,
"moduleId": 79
},
{
"parentId": 90,
"moduleId": 1
}
];
fiddle : https://jsfiddle.net/1c20hb7w/
当然,我无法更改数据库中的 ID(这太简单了)。 所以我想知道如何让一切正常工作,如果你有轨道可以帮助我的话。 提前致谢!
最佳答案
对于更复杂的树,我建议采用递归方法,例如:
var arry=[{parentId:null,moduleId:90},{parentId:1,moduleId:65},{parentId:1,moduleId:91},{parentId:65,moduleId:66},{parentId:66,moduleId:79},{parentId:90,moduleId:1}];
function recursiveTree(array) {
function getChildren(parents, input) {
return parents.map(parent => {
const children = input.filter(x => x.parentId === parent.moduleId);
parent.children = children;
if(children.length === 0) {
return parent;
} else {
parent.children = getChildren(children, input);
return parent;
}
})
}
const roots = array.filter(x => x.parentId === null);
return getChildren(roots, array);
}
var r = recursiveTree(arry)
console.log('array', r);
console.log('result', JSON.stringify(r))
关于javascript - 创建 ID 不相互跟随的父子树 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55186952/