Всем привет! У меня есть таблица в 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"
}
]
}
]
}
]
Возможно кто-то сталкивался с подобной задачей или может подсказать вариант решения?
// Данные
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);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я хочу сделать что-то вроде "соцсети", блог, форум, не знаю какой из терминов подобрать