Как сделать несколько условий внутри одного фильтра - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь создать фильтр на основе флажков.

Дело в том, что js игнорирует другие условия внутри фильтра, когда он активен

filterData() {
  return this.airlines.filter(x => {
    if (this.filters.options.length != 0 || this.filters.airlines.length != 0) {
      for (let i = 0; this.filters.options.length > i; i++) {

        if (this.filters.options[i] == 0) {
          return x.itineraries[0][0].stops == 0;
        }

        if (this.filters.options[i] == 1) {

          return x.itineraries[0][0].segments[0].baggage_options[0].value > 0;
        }
      }
    } else {
      return x;
    }
  })
}

Я знаю, что возврат остановит текущийцикл, но есть ли способ сделать это правильно?

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Обновление-1 : (Когда фильтровать запись для каждого проверенного случая ИЛИ случая)

Заменить цикл и все условия в одном возвращении на && для if и ||условие для данных:

var chbox = this.filters.options;
return $.inArray(0, chbox) != -1 && x.itineraries[0][0].stops == 0 
    || $.inArray(1, chbox) != -1 && x.itineraries[0][0].segments[0].baggage_options[0].value > 0;

Надеюсь, это поможет !!

$.inArray(value, arr) метод будет проверять все флажки и будет работать для всех отмеченных.

Обновление-2 (Когда фильтровать запись для каждого случая, отмеченного И для случая)

Согласно комментарию ниже, вы пытаетесь использовать флажок по требованию, поэтому используйте следующий код:

var chbox = this.filters.options;
boolean condition = true; 
if ($.inArray(0, chbox) != -1) {
   conditon = conditon && x.itineraries[0][0].stops == 0;
}

if ($.inArray(1, chbox) != -1) {
   conditon = conditon && x.itineraries[0][0].segments[0].baggage_options[0].value > 0;
}

return condition;
0 голосов
/ 22 сентября 2019

Ваша функция фильтра возвращает объект, который в идеале должен иметь логическое значение.Пожалуйста, измените код, как показано ниже.

filterData() {
  return this.airlines.filter(x => {
    let result = false;

    if (this.filters.options.length != 0 || this.filters.airlines.length != 0) {
      for (let i = 0; this.filters.options.length > i; i++) {
        if (this.filters.options[i] == 0) {
          result = x.itineraries[0][0].stops == 0;
          break;
        } else if (this.filters.options[i] == 1) {
          result = x.itineraries[0][0].segments[0].baggage_options[0].value > 0;
          break;
        }
      }
    }

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