@baroman4ik

Как правильно реализовать фильтрацию с двумя условиями?

Есть функция, которая должна фильтровать содержимое массива с помощью filter по двум условиям через if и первое условие возвращает ожидаемый результат, а вот во втором условии при выполнении должен вернуться новый объект, а возвращает итерируемый элемент. Подскажите пожалуйста как обойти этот косяк.
function search(value) {
    if (value !== "") {
      setFiteredArray((prev) =>
        prev.filter((theme) => {
          if (theme.name.indexOf(value) !== -1) return theme;
          else if (
            theme.subtopics.some(
              (topic) =>
                topic.name.toLowerCase().indexOf(value.toLowerCase()) !== -1
            ) === true
          )
            return {
              ...theme,
              subtopics: theme.subtopics.filter((topic) =>
                topic.name.toLowerCase().indexOf(value.toLowerCase()) !== -1
                  ? topic
                  : null
              )
            };
          else return null;
        })
      );
    } else {
      setFiteredArray(themes);
    }
  }

массив имееет такой вид: [ {..., name: value, subtopics: [..., name: dfgdfgdfg] } ]
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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