Создание иерархического дерева в JavaScript - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть такой плоский массив, который содержит объекты данных с идентификатором и значениями. Каждый идентификатор будет уникальным

var data = [{
        id: 1,
        value: 'as',
        parent: 2
    }, {
        id: 2,
        value: 'sasa',
        parent: 3
    }, {
        id: 3,
        value: 'sasa',
        parent: 
    }]

Как я могу создать иерархическое дерево, подобное «объекту» в JavaScript, а не массиву, потому что я также хочу получить доступ к элементам объекта, таким как 3.2.value

{
        id: 3,
        value: 'sasa',
        parent: '',
        2: {
            id: 2,
            value: 'sasa',
            parent: 3,
            1: {
                id: 1,
                value: 'as',
                parent: 2
            }
        }
    }

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать итеративный подход, используя объект для сбора и создания объекта для id и parent одновременно, чтобы сохранить их связь.

В конце вернуть свойство, корнем которого является родитель.

Результат немного отличается, потому что вы хотите обратиться к узлам, используя их id в качестве средства доступа.

var data = [{ id: 1, value: 'as', parent: 2 }, { id: 2, value: 'sasa', parent: 3 }, { id: 3, value: 'sasa', parent: '' }],
    tree = function (data, root) {
        return data.reduce(function (r, o) {
            Object.assign(r[o.id] = r[o.id] || {}, o);
            r[o.parent] = r[o.parent] || {};
            r[o.parent][o.id] = r[o.id];
            return r;
        }, Object.create(null))[root];
    }(data, '');

console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...