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

标签 javascript json

我正在尝试创建一棵包含数据库记录的树, 起初我使用了以下代码:

Create Parent-Child tree 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 
 }
];

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/

相关文章:

javascript - jquery 显示无不工作

javascript - 使用javascript显示多个数组

json - AngularJS 在 Controller 中多次调用 HTTP

javascript - 使用 JQuery 从本地 url 解析 JSON

c# - 使用嵌入在字符串值中的子对象反序列化 JSON 字符串

python - 从字典中删除双引号?

javascript - 将 Canvas 绘图导出为 html 格式

javascript - JS 对象/JSON key 通配符

javascript - 当不再需要变量时将变量设置为 null 是一种好习惯吗?

java - 使用 JSON 将字符串从 Android 发送到 PHP