【发布时间】:2011-10-25 18:49:47
【问题描述】:
我有一个二维数组以这种格式表示一棵树:
[["Food", 0], ["Dairy", 1], ["Milk", 2], ["Low-fat", 3], ["Butter", 2], ["Cheese", 2], ["Vegetables", 1], ["Spinach", 2], ["Meat", 1], ["Fish", 2], ["Salmon", 3], ["Poultry", 2]]
每个项目(节点)都是一个数组,其中第一个元素是名称,第二个元素是节点的级别(深度)。
我需要将此二维数组转换为嵌套的 JavaScript 对象,其中每个节点对象由名称(字符串)和子对象(对象数组)组成。结果应该是根对象(这里是“食物”),所有其他项目都作为其子项。输入数组总是有序的,所以可以假设第一个元素是根。
使用迭代或递归的最佳方法是什么?
【问题讨论】:
-
你怎么知道节点放在哪个对象下?没有办法知道
Milk和Butter在Dairy下使用你的结构。 -
@Xeon06:每个节点都在最后遇到的深度较低的节点之下,所以
Milk、Butter和Cheese都在Dairy之下;Spinach是Vegetables的唯一孩子;等 -
Milk、Butter和Cheese都属于 2 级。最后的 1 级是Dairy,因此是它们的父级。Fish也是 2 级,但在更接近的 1 级Meat之后。因此,一般来说,较高级别的节点是所有较低级别节点的父节点。具有相同级别编号的下一个节点是其兄弟节点。
标签: javascript arrays object tree