Js фильтр при условии, если существует - PullRequest
0 голосов
/ 04 мая 2020

Я бы хотел отфильтровать массив по некоторым условиям, используя метод "filter". Если активно только одно условие, проблем нет. Но если объект в массиве должен быть в двух условиях, возникает проблема.

getFilteredItems() {
      let customText = this.filters.customTextFilter.trim();
      return this.filteredItems.filter((x) => {

        if (customText !== '') {
          return x.name.includes(customText) || x.code.includes(customText) || x.city.includes(customText);
        }

        if (this.filters.currencySelected !== '') {
          return x.currency === this.filters.currencySelected;
        }
        return true;
      })
    }

Как объединить оба условия, если выбраны оба? У меня есть еще 3 условия, чтобы присоединиться. Так что, если кто-то выберет два условия, как проверить оба объекта и вернуть true, если оба истинны?

Спасибо

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Имейте переменную result и устанавливайте в false, когда условие не выполняется, и возвращайте результат

getFilteredItems() {

          let customText = this.filters.customTextFilter.trim();
          return this.filteredItems.filter((x) => {
            result=true;
            if (customText !== '') {
              result = result &&( x.name.includes(customText) || x.code.includes(customText) || x.city.includes(customText));
            }

            if (this.filters.currencySelected !== '') {
              result = result &&( x.currency === this.filters.currencySelected);
            }
            return result;
          })

        }
0 голосов
/ 04 мая 2020

Вы можете создать массив, содержащий ваши фильтры, и использовать функцию redu * для его итерации:

const filteredItems = [
    {
        name: 'USA',
        city: 'Washington',
        code: '',
        currency: '$'
    },
    {
        name: 'Germany',
        city: 'Berlin',
        code: '',
        currency: '€'
    },
    {
        name: 'Turkey',
        city: 'Istanbul',
        code: '',
        currency: '₺'
    }
]

const getFilteredItems = (customText = '', currencySelected = '') => {
    const myFilters = []
    if (customText !== '') {
        myFilters.push(x => x.name.includes(customText) || x.code.includes(customText) || x.city.includes(customText));
    }
    if (currencySelected !== '') {
        myFilters.push(x => x.currency === currencySelected);
    }
    return filteredItems.filter(x => myFilters.reduce((acc, myFilter) => acc && myFilter(x), true))
}

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