繁体   English   中英

创建ID不互相跟随的父子树JSON

[英]Create Parent-Child tree JSON with IDs not following each other

我试图用数据库记录创建树,起初我使用以下代码:

创建父子树JSON

效果很好,但是由于我可以在数据库中插入和删除树的节点,因此该功能不再起作用。 如您所见,现在我可以拥有第一个元素,其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 
 }
];

小提琴: 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)) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM