Создайте дерево JSON из материализованных путей

Я планирую использовать материализованные пути в MongoDB для представления дерева, и мне нужно преобразовать материализованные пути обратно в Дерево JSON.

пр. // Материализованный путь

var input = [
    {"id": "0", "path": "javascript" },
    {"id": "1", "path": "javascript/database" },
    {"id": "2", "path": "javascript/database/tree" },
    {"id": "3", "path": "javascript/mvc" },
    {"id": "4", "path": "javascript/mvc/knockout.js"},
    {"id": "5", "path": "javascript/mvc/backbone.js"},
    {"id": "6", "path": "c++" },
    {"id": "7", "path": "c++/c0xx"},
    {"id": "8", "path": "c++/c0xx/lambda expressions"},
    {"id": "9", "path": "c++/c0xx/vc10" }
];

Результатом будет:

[
    {
        "id": "0",
        "name": "javascript",
        "children": [
            {
                "id": "1",
                "name": "database",
                "children": [
                    {
                        "id": "2",
                        "name": "tree",
                        "children": []
                    }
                ]
            },
            {
                "id": "3",
                "name": "mvc",
                "children": [
                    {
                        "id": "4",
                        "name": "knockout.js",
                        "children": []
                    },
                    {
                        "id": "5",
                        "name": "backbone.js",
                        "children": []
                    }
                ]
            }
        ]
    },
    {
        "id": "6",
        "name": "c++",
        "children": [
            {
                "id": "7",
                "name": "c0xx",
                "children": [
                    {
                        "id": "8",
                        "name": "lambda expressions",
                        "children": []
                    },
                    {
                        "id": "9",
                        "name": "vc10",
                        "children": []
                    }
                ]
            }
        ]
    }
]

Я нашел Преобразование строки с разделителями в иерархический JSON с помощью JQuery , который отлично работает.

И я также нашел Построить дерево из материализованного пути , которое написано на Ruby и использует рекурсию. Мне интересно и любопытно увидеть, как это реализовано в Javascript, и интересно, есть ли люди, свободно владеющие как Ruby, так и Javascript, которые хотели бы его переписать. Я попробовал конвертер Ruby в JS, но результат был непонятным.

Спасибо, Невилл

10
задан Community 23 May 2017 в 10:34
поделиться