Фильтрация данных Javascript (вложенный словарь и массивы) - PullRequest
2 голосов
/ 07 февраля 2020

Я пытаюсь понять, как работает js filter ().

У меня есть API, который возвращает что-то вроде этого:

[
    {
        "name": "Category 1",
        "items": [
            {
                "name": "Vacancy item #1",
                "location": "Los Angeles",
                "overview": "Lorem ipsum",
                "get_absolute_url": "/careers/vacancy-item-1/"
            },
            {
                "name": "Vacancy item #2",
                "location": "Los Angeles",
                "overview": "Lorem ipsum",
                "get_absolute_url": "/careers/vacancy-item-2/"
            }
        ]
    },
    {
        "name": "Category 2",
        "items": [
            {
                "name": "Vacancy item #3",
                "location": "Washington D.C",
                "overview": "Lorem ipsum",
                "get_absolute_url": "/careers/vacancy-item-3/"
            }
        ]
    }
]

Я хочу отфильтровать эти данные на основе выбранного значения формы. Я работаю над VUE. JS и Django.

А это мой JS код

filteredItems() {
                let vacancycategories = this.listData,
                    city = this.city,
                    category = this.category


                if (city && city.length > 0) {
                    vacancycategories = vacancycategories.filter((cat) => {

                         cat.items = cat.items.filter((vacancy) => {
                            return vacancy.location.indexOf(city) !== -1
                        })
                            return cat
                    })
                } 

                if (category && category.length > 0) {
                    vacancycategories = vacancycategories.filter((cat) => {
                        return cat.name.indexOf(category) !== -1
                    })
                }  
                return vacancycategories
            }

Часть категории работает, как и ожидалось. Но когда я пытаюсь отфильтровать поля местоположения, это не работает должным образом. Первый выбранный параметр работает нормально, но затем, когда вы выбираете другой параметр, он возвращает пустой список.

1 Ответ

5 голосов
/ 07 февраля 2020

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

vacancycategories = vacancycategories.filter(cat => {
  return (
    cat.items.filter(vacancy => {
      return vacancy.location.indexOf(city) !== -1;
    }).length > 0
  );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...