2017-03-03 104 views
1

我有一个树结构如下所示:动态树生成使用javascript

{ 
    "7": ["3", "8"], 
    "3": ["2", "4", "1"], 
    "4": ["5", "6"], 
    "8": ["12", "13"] 
} 

这个字典简单地意味着该树的根节点是7(因为它不是任何其他节点的子节点),其有两个孩子3和8,而3有三个孩子(2,4,1),8个孩子有两个孩子(12,13)。 3有一个孩子4,有两个孩子(5,6)。

我的问题是我需要一个动态树生成器,因为我每次运行代码时都会有不同的树(并且它们不会是二叉树!)结构。我的代码是在python中,我想在web中显示树。

有没有什么javascript我可以用来绘制这棵树的库?

+2

要求库是OT。 –

+0

有任何数量的;我刚开始看。虽然如果你想绘制这样的病态树,那里不存在节点,你可能会遇到麻烦。 –

+0

@DaveNewton,树应该是一个有效的树,我可以保证。 :) –

回答

1

您可以迭代对象的键并使用所有关系构建一个新的临时对象。然后从根数组中删除所有的密钥与前任。

返回一个带有根键和所有儿童的新对象。

var data = { 7: ["3", "8"], 3: ["2", "4", "1"], 4: ["5", "6"], 8: ["12", "13"] }, 
 
    tree = function (object) { 
 
     var root = Object.keys(data), 
 
      o = Object.create(null), 
 
      r = Object.create(null); 
 

 
     root.slice().forEach(function (k) { 
 
      o[k] = o[k] || {}; 
 
      data[k].forEach(function (a) { 
 
       var p = root.indexOf(a); 
 
       if (p !== -1) { 
 
        root.splice(p, 1); 
 
       } 
 
       o[a] = o[a] || {}; 
 
       o[k][a] = o[a]; 
 
      }); 
 
     }); 
 
     r[root] = o[root]; 
 
     return r; 
 
    }(data); 
 

 
console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }