javascript - 数据过滤 Javascript(嵌套字典和数组)

标签 javascript django vue.js filter django-rest-framework

我正在尝试弄清楚 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
            }

类别部分按预期工作。但是当我尝试过滤位置字段时,它无法正常工作。第一个选择的选项正常工作,但当您选择另一个选项时,它返回一个空列表。

最佳答案

每个过滤函数都需要返回 bool 值。
内部过滤器功能很好,但外部过滤器功能需要更改。 以下更改应该有效。

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

关于javascript - 数据过滤 Javascript(嵌套字典和数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60115120/

相关文章:

django - 使用 Django rest-framework-jwt 撤销 token

javascript - 无法解析模块 'babel-runtime/core-js/object/define-properties'

vue.js - Vue Cypress 和 Gitlab CI/CD

javascript - 如何将 JQuery $.post 中的值保存到 Javascript 全局变量

python - 如何在 View 中访问 Django 方法

javascript - Google Charts - 向彩色柱形图添加工具提示

python - Django 教程第 1 部分 'Poll' 对象没有属性 'was_published_today'

vue.js - Vuelidate 复选框验证

javascript - 根据值重新排序数组

javascript - 将 Firestore 可观察对象转换到自定义对象