Konstantin18ko
@Konstantin18ko
Стоматолог

Как сделать поиск по двум параметрам?

Есть фильтр по одному параметру, как сделать по двум?

computed: {
        namesFilter() {
            if (this.name_from) {
                return this.names.filter(item => {
                    return item.children.item[3].value.toLowerCase().includes(this.name_from.toLowerCase())  // Поиск по полному названию
                    return item.children.item[4].value.toLowerCase().includes(this.name_from.toLowerCase())  // Поиск по короткому названию
                })
            } else {
                return this.names;
            }
        }
    },
  • Вопрос задан
  • 521 просмотр
Решения вопроса 2
Kozack
@Kozack Куратор тега Vue.js
Thinking about a11y
Применить логическое ИЛИ || в функции фильтре

return 
item.children.item[3].value.toLowerCase().includes(this.name_from.toLowerCase())  // Поиск по полному названию
|| item.children.item[4].value.toLowerCase().includes(this.name_from.toLowerCase())  // Поиск по короткому названию
Ответ написан
0xD34F
@0xD34F Куратор тега Vue.js
computed: {
  namesFilter() {
    const name = this.name_from.toLowerCase();
    const names = this.names;
    const filterBy = [ 3, 4 ];

    return name
      ? names.filter(n => filterBy.some(i => n.children.item[i].value.toLowerCase().includes(name)))
      : names;
  },
},

Ну и понятно, какой напрашивается следующий шаг - сделать filterBy свойством компонента, привязать его содержимое через v-model к, например, чекбоксам, и вот уже пользователь может настраивать фильтрацию по произвольному количеству свойств.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@bagzon
Backend PHP, NodeJs, JS
Фильтры будут между собой конкурентные, т.е тебе надо сначала фильтрануть по "по полному названию" потом отдельным заходом по результату предыдущего "по короткому названию"

В целом странное дело)
Ответ написан
@Retreat
если нужно просто объединить результаты 2 фильтров то что-то похожее на это
namesFilter() {
    if (this.name_from) {
        let filter1 = this.names.filter(item => {
            return item.children.item[3].value.toLowerCase().includes(this.name_from.toLowerCase())  // Поиск по полному названию
        })
        let filter2 = this.names.filter(item => {
            return item.children.item[4].value.toLowerCase().includes(this.name_from.toLowerCase())  // Поиск по короткому названию
        })
       return [...filter1, ...filter2]
    } else {
        return this.names;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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