Whitejamer
@Whitejamer

Наполения массива по соответствию Javascript?

В catalogs.json реализованы подкаталоги путем добавления поля parentId.
Каждый товар относиться к определенному каталогу, соответственно у каждого каталога есть поле catalogId

Когда пользователь смотрит товары в родительской категории, то очевидно ему нужно показывать товары и из всех дочерних категорий, как например он смотрит товары из категории <Девайсы> то нужно отобразить и товары из категорий которые имеют parentID = id выбраного каталога:
<Клавиатуры>,<Мышки> и пр. а у этих каталогов могут быть и свои дочерние каталоги <Механические клавиатуры>,<Беспроводные мышки> т.е вложенность может быть до бесконечности.

Мне нужно как то имея на руках массив catalogs(в котором содержаться все каталоги) и константу selectedCatalog с выбраным id каталога - положить в массив allIds все ID дочерних каталогов и соответственно значение selectedCatalog.

Пожалуйста скажите хотя бы в какую сторону копать потому что я вообще не понимаю как реализовывать такую вложенную операцию перебора.
Я разрабатываю приложение на React, Redux если это важно.

JSON catalogs.json
[
  {
    "id": 1,
    "title": "Девайсы",
    "parentId": null
  },
  {
    "id": 2,
    "title": "Мышки",
    "parentId": 1
  },
  {
    "id": 3,
    "title": "Беспроводные мышки",
    "parentId": 2
  },
  {
    "id": 4,
    "title": "Еще какой то атрибут мышек",
    "parentId": 3
  },
]


const catalogs = ... вытянутый из JSON массив
 const selectedCatalog = ...id выбранного каталога
 const allIds = [] // Пустой массив который нужно наполнить
 
// Какой то процесс перебора который я никак не могу реализовать
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
Stalker_RED
@Stalker_RED
Вы пытаетесь заново изобрести фасетный фильтр? Возможно проще будет взять готовую реализацию.

(первая попавшаяся ссылка по запросу "faceted search react" https://react.rocks/tag/Faceted_Search)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@crystalbit
Full Stack NodeJS PHP JS React
const allIds = catalogs.filter(it => it.parentId === selectedCatalog).map(it => it.id).concat([ selectedCatalog ]);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы