Задать вопрос
@BKaiyrbekov

Что я пропустил, при работе с рекурсией?

Есть такой массив:

const dataArr = [
    {
          "id": 28,
          "title": "Бесплатные материалы",
          "children": [
           {
                "id": 29,
                "title": "Lorem", 
                "children": [
                    {
                        "id": 32,
                        "title": "Lorem", 
                        "children": []
                    },
                    {
                        "id": 30,
                        "title": "Lorem", 
                        "children": []
                    }
                ],
           }, 
           {
            "id": 33,
            "title": "Lorem", 
            "children": [
                {
              "id": 35,
              "title": "Lorem", 
              "children": []
                }, 
                {
                "id": 34,
                "title": "Lorem", 
                "children": []
                }
            ],
          }
        ],
    }
]

Ещё есть переменная, содержащая id объекта: let objID = 29.

И есть рекурсивная функция, которая обрабатывает этот массив:

funtion test1(arr) {
        let res = [];
        arr.forEach(item => {
          if (item.id === objID) {
            res.push(item)
          } else {
            test1(item.children)
          }
        });
        console.log('funtion test1', res)
        return res
}
console.log('result', test1(dataArr))

Ожидаемый результат:

result = [ {
                "id": 29,
                "title": "Lorem", 
                "children": [
                    {
                        "id": 32,
                        "title": "Lorem", 
                        "children": []
                    },
                    {
                        "id": 30,
                        "title": "Lorem", 
                        "children": []
                    }
                ],
           },
]

Но результат такой, и непонятно почему:

5e999ec2c2c13812670391.jpeg
Как сделать так. чтобы он пустые ответы не отдавал?
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик расширенный
    13 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
Решения вопроса 1
SimBioT19
@SimBioT19
{{ user.about }}
Заменить
funtion test1(arr)
на
funtion test1(arr) {
       return arr.reduce((res, item) => {
          if (item.id === objID) {
            res.push(item);
          } else {
          res.push(...test1(item.children));
          }
           return res;
        }, []);       
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы