Получить всю дочернюю запись из массива объектов древовидного типа Javascript

У меня есть одни данные JSON, как показано ниже.

var data =
[
   {
      "id":1,
      "parentId":0
   },
   {
      "id":2,
      "parentId":1
   },
   {
      "id":3,
      "parentId":1
   },
   {
      "id":4,
      "parentId":2
   },
   {
      "id":5,
      "parentId":4
   },
   {
      "id":6,
      "parentId":3
   },
   {
      "id":7,
      "parentId":6
   },
   {
      "id":8,
      "parentId":7
   }
]

теперь я хочу получить всех дочерних элементов id=2 или 3

например: дети идентификатора 2: (4,5) на 3: дети идентификатора 2: (6,7,8)

как я могу получить всю дочернюю запись

Я пытался использовать цикл for, но потерпел неудачу, ниже моя работа

здесь ArrFolderTree = данные;

            let parentId = [];
            let arrAdminFolder = [];
            for (let i = ArrFolderTree.length - 1; i > 0; i--) {
                let ind = 0;
                while (ind < ArrFolderTree.length) {
                    for (let o = 0; o < ArrAllFolders.length; o++) {
                        if (ArrAllFolders[o].FolderId == ArrFolderTree[ind].Id) {
                            parentId.push(ArrFolderTree[ind].Id);
                            arrAdminFolder.push(ArrFolderTree[ind].Id);
                        }
                        let currentParentId = 0;
                        for (let ab = 0; ab < parentId.length; ab++) {
                            if (parentId[ab] == ArrAllFolders[o].FolderId) {
                                currentParentId = ArrFolderTree[ind].Id;
                                arrAdminFolder.push(ArrFolderTree[ind].Id);
                            }
                        }
                        if (currentParentId > 0)
                            parentId.push(currentParentId);
                    }
                    ind++;
                }
            }

приведенный выше цикл неверен, но я хочу знать, как я могу использовать цикл здесь

Каков ожидаемый формат результата здесь?

VLAZ 10.12.2020 12:51

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

TWM TV 10.12.2020 12:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
668
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

const
    getChildren = id => (relations[id] || []).flatMap(o => [o, ...getChildren(o.id)]),
    data = [{ id: 1, parentId: 0 }, { id: 2, parentId: 1 }, { id: 3, parentId: 1 }, { id: 4, parentId: 2 }, { id: 5, parentId: 4 }, { id: 6, parentId: 3 }, { id: 7, parentId: 6 }, { id: 8, parentId: 7 }],
    relations = data.reduce((r, o) => {
        (r[o.parentId] ??= []).push(o);
        return r;
    }, {});

console.info(getChildren(2)); // 4 5
console.info(getChildren(3)); // 6 7 8
.as-console-wrapper { max-height: 100% !important; top: 0; }

Другие вопросы по теме