vue.js: фильтрация не работает, как я ожидал - PullRequest
0 голосов
/ 10 июня 2018

Я использую этот код для фильтрации любых частей с категориями ДРУГИЕ, чем «1», «2» или «3», но отображаемый список не фильтрует кошек, таких как «LG» и «NHA».Я использую фильтр неправильно?

return this.components.filter((c) => {
    if (c.cat in ['1', '2', '3']) {
        return c;
    }
});

Ответы [ 2 ]

0 голосов
/ 10 июня 2018
Функция обратного вызова

filter ожидает возвращаемое значение bool.Вы можете использовать includes, чтобы определить, содержит ли массив определенный элемент.

Если вы хотите отфильтровать components, чтобы включить только элементы , другие , кроме 1,2 и 3, выможно использовать ! для отрицания результата includes.

let components = [{cat: '1'}, {cat: '2'}, {cat: '3'}, {cat: '4'},{cat: '5'}];
let result = components.filter((c) => {
  return !['1', '2', '3'].includes(c.cat);
});

console.log(result);
0 голосов
/ 10 июня 2018

JavaScript * in оператор не проверяет, находится ли значение в массиве;он проверяет, присутствует ли имя свойства в объекте (или его прототипах).

Чтобы узнать, есть ли значение в массиве, вы можете использовать современный includes (который может быть заполнен в старых браузерах) или более старый indexOf метод:

if (['1', '2', '3'].includes(c.cat)) {

или

if (['1', '2', '3'].indexOf(c.cat) != -1) {

Для более сложных проверок вы можете использовать some, что позволяет использовать обратный вызов для проверки соответствия, а не просто для сопоставления значений.

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