как я могу отфильтровать несколько ключей извлеченных данных в vuex? - PullRequest
0 голосов
/ 10 июля 2020

до сих пор я фильтрую данные в своем действии на основе такого имени:

filteredBeers: (state) => {
    if (state.searchString) {
      return state.beers.filter((beer) =>
        beer.name.toLowerCase().includes(state.searchString.toLowerCase())
      );
    } else if (state.searchString == "") {
      return state.beers;
    }
  },

, но я хочу иметь возможность искать больше ключей, чем только имя

это объект пива я оставил некоторые вещи, потому что в противном случае я не мог опубликовать вопрос, но вещи, которые мне нужны, находятся там

[
  {
    "id": 223,
    "name": "Prototype Pils 2.0",
    "tagline": "Revamped German Pils.",
    "first_brewed": "06/2016",
    "image_url": "https://images.punkapi.com/v2/keg.png",
    "abv": 4.7,
    },
    "ingredients": {
      "malt": [
        {
          "name": "Pilsner",
          "amount": {
            "value": 1.3,
            "unit": "kilograms"
          }
        },
        {
          "name": "Caramalt",
          "amount": {
            "value": 0.12,
            "unit": "kilograms"
          }
        },
        {
          "name": "Munich",
          "amount": {
            "value": 0.5,
            "unit": "kilograms"
          }
        },
        {
          "name": "Pale Ale",
          "amount": {
            "value": 1.2,
            "unit": "kilograms"
          }
        }
      ],
      "hops": [
        {
          "name": "Magnum",
          "amount": {
            "value": 4,
            "unit": "grams"
          },
          "add": "start",
          "attribute": "bitter"
        },
        {
          "name": "Perle",
          "amount": {
            "value": 20,
            "unit": "grams"
          },
          "add": "middle",
          "attribute": "flavour"
        },
        {
          "name": "Perle",
          "amount": {
            "value": 10,
            "unit": "grams"
          },
          "add": "end",
          "attribute": "aroma"
        }
      ],
      "yeast": "Wyeast 2007 - Pilsen Lager™"
    },
    "food_pairing": [
      "Tuna & salmon sushi (with plenty of wasabi!)",
      "Chipotle chicken burrito",
      "Rhubarb fool with shortbread"
    ],
    
]

Я хотел бы иметь возможность фильтровать данные по malt.name, hop .name, yeast and food_pairing и abv. как бы я go об этом

1 Ответ

0 голосов
/ 11 июля 2020

Вы можете просто добавить предложения OR и использовать метод массива some, который возвращает истину, если хотя бы один элемент проходит указанный предикат.

    if (state.searchString) {
      const query = state.searchString.toLowerCase()
      return state.beers.filter((beer) =>
        beer.name.toLowerCase().includes(query) ||
        beer.ingredients.malt.some(malt => malt.name.toLowerCase().includes(query)) ||
        beer.ingredients.hops.some(hop => hop.name.toLowerCase().includes(query)) ||
        beer.ingredients.yeast.toLowerCase().includes(query) ||
        beer.food_pairing.some(food => food.toLowerCase().includes(query)) ||
        beer.abv.toString().includes(query)
       );
    } else if (state.searchString == "") {
      return state.beers;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...