Как отформатировать простой запрос к объекту json иерархии?Javascript

Форум по Javascript
Ответить
Anonymous
 Как отформатировать простой запрос к объекту json иерархии?

Сообщение Anonymous »

Я хочу отформатировать простой запрос к иерархии json для отображения во внешнем интерфейсе, но я не знаю, как это сделать.
У меня может быть реляционная база данных с таблицей под названием «Todo», которая имеет следующий столбец
  • Идентификатор
  • Имя
  • ParentID
например
[
{id: 2, Name:"Task 1.1", ParentID: 1},
{id: 5, Name:"Task 2", ParentID: null},
{id: 6, Name:"Task 2.1", ParentID: 5},
{id: 1, Name:"Task 1", ParentID: null},
{id: 3, Name:"Task 1.2", ParentID: 1},
{id: 4, Name:"Task 1.3", ParentID: 1},
{id: 7, Name:"Task 2.2", ParentID: 5},
{id: 8, Name:"Task 2.3", ParentID: 5},
{id: 9, Name:"Task 3", ParentID: null}
]

в
[
{
"id": 5,
"Name": "Task 2",
"ParentID": null,
"subtasks": [
{
"id": 6,
"Name": "Task 2.1",
"ParentID": 5,
"subtasks": []
},
{
"id": 7,
"Name": "Task 2.2",
"ParentID": 5,
"subtasks": []
},
{
"id": 8,
"Name": "Task 2.3",
"ParentID": 5,
"subtasks": []
}
]
},
{
"id": 1,
"Name": "Task 1",
"ParentID": null,
"subtasks": [
{
"id": 2,
"Name": "Task 1.1",
"ParentID": 1,
"subtasks": []
},
{
"id": 3,
"Name": "Task 1.2",
"ParentID": 1,
"subtasks": []
},
{
"id": 4,
"Name": "Task 1.3",
"ParentID": 1,
"subtasks": []
}
]
},
{
"id": 9,
"Name": "Task 3",
"ParentID": null,
"subtasks": []
}
]

Для двух уровней (корневой и дочерний) моя попытка состоит в том, чтобы поместить задачи, у которых нет родительского идентификатора (корневой), в массив, а затем поместить задачи, у которых есть родительский элемент, в родительскую задачу
Я попробовал двухуровневую иерархию и думаю, что она работает нормально, но не знаю, как реализовать больше уровней в моем проекте next.js, и я не совсем уверен, хорошая это практика или нет.
вот код, который у меня есть пробовал.
const data = [
{id: 2, Name:"Task 1.1", ParentID: 1},
{id: 5, Name:"Task 2", ParentID: null},
{id: 6, Name:"Task 2.1", ParentID: 5},
{id: 1, Name:"Task 1", ParentID: null},
{id: 3, Name:"Task 1.2", ParentID: 1},
{id: 4, Name:"Task 1.3", ParentID: 1},
{id: 7, Name:"Task 2.2", ParentID: 5},
{id: 8, Name:"Task 2.3", ParentID: 5},
{id: 9, Name:"Task 3", ParentID: null},
];

function buildHierarchy(data) {
let result = [];
let todos = [...data];

// construct root level
todos.forEach((task)=>{
if(task.ParentID === null){
const new_task = {...task, subtasks:[]}

result.push(new_task)
}
})

// constrct child level
result.forEach((parent, index)=>{
todos.forEach((task)=>{
if(task.ParentID === parent.id){
const new_task = {...task, subtasks:[]}

parent.subtasks.push(new_task)
}
})
})

return result
}

const result = buildHierarchy(data);
console.log(JSON.stringify(result,null,2));


Подробнее здесь: https://stackoverflow.com/questions/793 ... son-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»