@webe
frontend

Как получить ID детей в масиве через рекурсию?

Помогите плиз с алгоритмом.
как можно найти всех "детей" России (спускаясь вниз по деерву)?
т.е. нужно как-то через рекурсию посмотреть детей россии, у каждого ребенка посмотреть его детей и т.д.

https://jsfiddle.net/6cxuzp2t/
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
@ilya_leykin
Можно обойтись без рекурсии

const sources = [{
    "id": 1,
    "parent_id": 0,
    "name": "Россия"
  },
  {
    "id": 2,
    "parent_id": 0,
    "name": "Украина"
  },
  {
    "id": 3,
    "parent_id": 1,
    "name": "Москва"
  },
  {
    "id": 4,
    "parent_id": 1,
    "name": "Питер"
  },
  {
    "id": 5,
    "parent_id": 3,
    "name": "Улица Пушкина"
  },
]
// 1 -> [3, 5] // дети россии  - это Москва и Улица пушкина
// 2 -> [] // дети украины  - пусто
// 3 -> [5] // дети москвы  - улица пушкина
// 4 -> [0] // дети питера  - пусто
// 5 -> [0] // дети улица пушкина  - пусто


const fn = (data, findId) => {
  const parents = data.reduce((acc, item) => {
    if (acc.has(item.parent_id)) {
      return new Set([...acc, item.id]);
   }
    
    return acc;
  }, new Set([findId]));
  
  return data
    .filter(item => parents.has(item.parent_id))
    .map(item => item.id);
}

console.log(fn(sources, 1));
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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