@TuMko

Почему не срабатывает js метод filter?

В проекте Vue фильтрую массив данных. Применяю два метода фильтрации: в первом случае по строке (отрабатывает как надо) и во втором случае по массиву значений. Второй метод срабатывает только тогда, если после него применить первый метод, т.е. сначала нужно отфильтровать по массиву и потом по строке. Подскажите где ошибка и как исправить?

//сюда прилетает значение через emit вида:
// {
//  country: "aaa",
//  types: ["bbb", "ccc"],
// }
const filter = ref({});

const hotels = computed(() =>
  store.getters["hotels"].hotels
    .filter((hotel) => {
      if (filter.value.country) {
        return hotel.country
          .toLowerCase()
          .includes(filter.value.country.toLowerCase());
      }
      return true;
    })
    .filter((hotel) => {
      if (filter.value.types && filter.value.types.length) {
        return filter.value.types.includes(hotel.type);
      }
      return true;
    })
);
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега JavaScript
где ошибка

Там, где вы решили начать тянуть свои клешни в сторону vue без знаний языка.

как исправить?

Освойте js.

//сюда прилетает значение через emit вида:
// {
//  country: "aaa",
//  type: ["bbb", "ccc"],
// }

То есть, type - это массив.

if (filter.value.type) {
  return filter.value.type.includes(hotel.type);
}

Каков логический эквивалент пустого массива? Не тот, что вам кажется.
Ответ написан
Ваш ответ на вопрос

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

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