Фильтр не работает так, как я идеализировал в js - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь отфильтровать массив объектов (FilterListing) по массиву чисел (filters ['BedroomCount']) . Мне нужны те элементы, у которых спальня спальни равняется одному из чисел в массиве. Журнал правильно выводит логические значения, но оператор if не работает. В чем может быть проблема?

   this.filteredListing = this.filteredListing.filter(item => {
      if(this.filters['bedroomCount'].length === 0) {
        return true;
      } else {
        this.filters['bedroomCount'].forEach(elem => {
          console.log(`${item['bedroomCount']}-${elem}  ${item['bedroomCount'] === elem}`)
          if(item['bedroomCount'] === elem) return true;
          else return false;
        });
      }
    });

1 Ответ

1 голос
/ 05 февраля 2020

Здесь довольно легко исправить:

this.filteredListing = this.filteredListing.filter(item => {
  if(this.filters['bedroomCount'].length === 0) {
    return true;
  } else {
    return this.filters['bedroomCount'].some(elem => {
      if(item['bedroomCount'] === elem) {
        return true;
      } else {
        return false;
      }
    });
  }
});

Но это не исправляет то, что вызвало ошибку, во-первых: отсутствие return было трудно обнаружить и трудно проверить ! Давайте это исправим. Поскольку мы используем this Я предполагаю, что у нас есть класс, поэтому давайте добавим метод, кодирующий логи фильтрации c:

filterByBedroomCount (item) {
  // It's a lot to type over and over so we'll pull it out.
  const ct = this.filters.bedroomCount;
  // Added bonus, the conditional logic fits readably on to
  // one line now.
  return ct.some(elem => item.bedroomCount === elem);
}

Обратите внимание, что я также ужесточил условная логика c, вам не нужны условные операторы, когда сами значения являются истинными / ложными. Помогает, что .some в пустом массиве всегда будет возвращать false, что означает, что вам даже не нужна проверка длины. Теперь вы можете передать имитируемый элемент методу в модульном тесте, чтобы убедиться, что он выполняет то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...