繁体   English   中英

从平面数组构建树

[英]Build a tree from a flat array

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

[
    {
        "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() ,然后将每个 object 设为children属性下的前一个对象的属性。 完成后,我们 re 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"
    }
  }
}

通过那里的索引迭代并将下一个节点添加到前一个索引。

执行:

 const nodes = [{ "h1": "h001", "h2": "z001" }, { "h1": "h002", "h2": "z002" }, { "h1": "h003", "h2": "z003" }]; for (let i = 1; i < nodes.length; i++) { nodes[i - 1].children = nodes[i]; } console.log('solutionByIndex', nodes[0]);

您可以使用递归:

 function to_tree(vals){ var v = vals.shift() return vals.length? {...v, children:to_tree(vals)}: v } var vals = [{ "h1": "h001", "h2": "z001" }, { "h1": "h002", "h2": "z002" }, { "h1": "h003", "h2": "z003" }]; console.log([to_tree(vals)])

暂无
暂无

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

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