javascript - 从平面数组构建一棵树

标签 javascript arrays tree nodes

我面临着从平面数组构建树的问题。我们有一个数组。

[
    {
        "h1": "h001",
        "h2": "z001"
    },
    {
        "h1": "h002",
        "h2": "z002"
    },
    {
        "h1": "h003",
        "h2": "z003"
    }
]

我想要得到这样的东西:

[{
    "h1": "h001",
    "h2": "z001",
    "children": {
        "h1": "h002",
        "h2": "z002",
        "children": {
            "h1": "h003",
            "h2": "z003"
        }
    }
}]

有办法实现吗?

谢谢!

最佳答案

这将是使用数组 map() 的好地方方法。本质上,我们将使用 slice() 获取数组的浅拷贝。 ,然后reverse()它,然后使每个对象成为 children 下前一个对象的属性。属性(property)。完成后,我们重新 reverse()用于获取原始订单并获取第一项的数组。

let values = [{
    "h1": "h001",
    "h2": "z001"
}, {
    "h1": "h002",
    "h2": "z002"
}, {
    "h1": "h003",
    "h2": "z003"
}];

let newValues = values.slice().reverse().map((e,i,a) => i ? (a[i] = { ...e, children: a[i-1] }) : a[i]).reverse()[0];

console.log(newValues);

输出:

{
  "h1": "h001",
  "h2": "z001",
  "children": {
    "h1": "h002",
    "h2": "z002",
    "children": {
      "h1": "h003",
      "h2": "z003"
    }
  }
}

关于javascript - 从平面数组构建一棵树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67058460/

相关文章:

javascript - jQuery/Javascript:通过更改选项(例如形状,颜色)自定义图片/头像

javascript - 如何从没有目的地的给定节点创建路径

javascript - 发布时出现错误的表单数据名称

c++ - 构造函数生成对象但不为其赋值

javascript - Angular UI 树 - 只允许拖放到第二级(子节点)

javascript - 登录 post 请求生成错误

c++ - 从文件中读取并保存到数组c++

c++ - c++中的这个反向数组代码有什么问题?

Java - 如何阻止用户输入整数以外的内容?

algorithm - 查找 k 阶斐波那契树中两个节点之间的路径