javascript - 将平面数组解析为嵌套结构(树)

标签 javascript d3.js tree-structure

例如,我想解析以下数组:

var array1 = ["a.b.c.d", "a.e.f.g", "a.h", "a.i.j", "a.b.k"]

进入:

var json1 = {
    "node": "a",
    "leaf": false,
    "children": [{
            "node": "b",
            "leaf": false,
            "children": [{
                    "node": "c",
                    "children": [{
                        "node": "d",
                        "leaf": true,
                        "children": []
                    }]
                },
                {
                    "node": "h",
                    "leaf": true,
                    "children": []
                }
            ]
        },
        {
            "node": "e",
            "leaf": false,
            "children": [{
                "node": "f",
                "leaf": true,
                "children": []
            }]
        },
        {
            "node": "g",
            "leaf": true,
            "children": []
        }
    ]
}

我认为 D3.JS 提供了一个很好的方法来做到这一点,但我找不到一些好的例子。

感谢您的帮助!

最佳答案

您可以使用嵌套哈希表方法来构建树结构。

var nodes = ["a.b.c.d", "a.e.f.g", "a.h", "a.i.j", "a.b.k"],
    result = [];

nodes.forEach(function (a) {
    a.split('.').reduce(function (r, k, i, kk) {
        if (!r[k]) {
            r[k] = { _: [] };
            r._.push({ node: k, leaf: i + 1 === kk.length, children: r[k]._ });
        }
        return r[k];
    }, this);
}, { _: result });

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

关于javascript - 将平面数组解析为嵌套结构(树),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44781536/

相关文章:

c - XML 是否存在任何二进制替代方案

javascript - NodeJs使用Request Promise调用外部API,从响应体中保存数据

JavaScript:查找嵌套[引用]

javascript - 多个路径上的笔画破折号数组补间

javascript - "import"使用 webpack ing d3 和 d3-cloud

javascript - 多系列 d3 svg 图表不显示刻度

java - 删除树结构中没有特定子节点的节点

javascript - array.splice 不工作

php - 用于发送到 PHP 的最高效的 JavaScript

Python树结构