node.js binary-tree to json

304
19 июля 2017, 22:57

Всем привет! У меня есть таблица в mysql:

Сейчас научился получать следующее:

[
 "{\"name\":1,\"children\":[{\"name\":2},{\"name\":3}]}",
 "{\"name\":2,\"children\":[{\"name\":null},{\"name\":null}]}",
 "{\"name\":3,\"children\":[{\"name\":5},{\"name\":null}]}",
 "{\"name\":5,\"children\":[{\"name\":4},{\"name\":null}]}",
 "{\"name\":4,\"children\":[{\"name\":null},{\"name\":null}]}"
]

Мне необходимо получить JSON следующего вида:

"name": "1",
"children": [
  {
    "name": "2"
  },
  {
    "name": "3",
    "children": [
        {
            "name": "5",
            "children": [
                {
                    "name": "4"
                }
            ]
        }
    ]
  } 
]

Возможно кто-то сталкивался с подобной задачей или может подсказать вариант решения?

Answer 1

// Данные 
const data = [ 
 "{\"name\":1,\"children\":[{\"name\":2},{\"name\":3}]}", 
 "{\"name\":2,\"children\":[{\"name\":null},{\"name\":null}]}", 
 "{\"name\":3,\"children\":[{\"name\":5},{\"name\":null}]}", 
 "{\"name\":5,\"children\":[{\"name\":4},{\"name\":null}]}", 
 "{\"name\":4,\"children\":[{\"name\":null},{\"name\":null}]}", 
 "{\"name\":6,\"children\":[{\"name\":null},{\"name\":1}]}", 
].map(item => JSON.parse(item)); 
// Вспомогательная функция 
const getByName = name => data.find(el => el.name === name); 
// Основная магия здесь 
const grow = root => { 
    // Фильтруем null и заменяем детей на ветки, построенные из них этой же функцией 
    root.children = root.children.filter(el => el.name).map(el => grow(getByName(el.name)));  
    // Отбираем детский массивчик у бездетных веток 
    if(!root.children.length) delete root.children;  
   return root; 
} 
// Находим элемент, у которого нет родителя (корень) 
const root = data.find(el => !data.find(parent => parent.children.find(child => child.name == el.name))); 
// Выращиваем дерево из корня 
const tree = grow(root); 
// Высаживаем 
console.log(tree);

READ ALSO
Docker container Импорт/Экспорт базы данных

Docker container Импорт/Экспорт базы данных

Использую этот https://hubdocker

270
Удаляем значение из JSON-массива MySQL

Удаляем значение из JSON-массива MySQL

Как удалить значение в JSON-массиве MySQL?

270
Логика MySQL базы пользовтелей и новостей

Логика MySQL базы пользовтелей и новостей

Внутренняя почта, пользователи, новости

246
Хорошие манеры при создании web-проекта

Хорошие манеры при создании web-проекта

Я хочу сделать что-то вроде "соцсети", блог, форум, не знаю какой из терминов подобрать

215