Построить иерархическое дерево из плоского списка с дочерним полем и сохранить порядок детей? - PullRequest
0 голосов
/ 29 сентября 2018

Подобный вопрос был задан ранее здесь и здесь , есть также npm-пакетов также НО - я не могунайдите фрагмент кода JavaScript или пакет npm, который позволил бы сохранить порядок дочерних элементов

Рассмотрим следующую структуру данных:

var nodes = [{id: 'a', parent: null, children: ['c', 'b']},
             {id: 'b', parent: 'a', children: []},
             {id: 'c', parent: 'a', children: []}]

Я хотел бы получитьвложенный объект, подобный этому:

var tree = {id: 'a', parent: null, children: [
    {id: 'c', parent: 'a', children: []},
    {id: 'b', parent: 'a', children: []}
]}

Важным фактом является то, что, поскольку порядок дочерних элементов a равен c, b , результирующий Массив children во вложенной структуре сохранит порядок.

1 Ответ

0 голосов
/ 29 сентября 2018

Довольно просто, если вы сначала строите карту:

 const nodeById = new Map(nodes.map(el => [el.id, el]));

Затем вы можете легко построить дерево:

 let root;

 for(const node of nodes) {
   node.children = node.children.map(id => nodeById.get(id));
   if(!node.parent) root = node;
 }
...