【问题标题】:How to filter by more than one element in Vuejs如何在Vuejs中过滤多个元素
【发布时间】:2017-10-26 03:38:09
【问题描述】:

我正在Vuejs 中实现一个应用程序,我有两个选择,如果在父选择中选择了任何选项,则会在其中过滤子选择。我想添加一个额外的过滤器来检查它是否是客户端:

我有一个包含所有数据的 model.data,它基本上是一个元素数组:

model.data: [
    {id: 1, name: XYZ 1, is_client: 0, address: "ABCD Address 1"},
    {id: 2, name: XYZ 2, is_client: 1, address: "ABCD Address 2"},
    {id: 3, name: XYZ 3, is_client: 0, address: "ABCD Address 3"},
]

我有一个父选择的v-model="company_name",它在子选择中用作过滤器

filteredCompanyOptions() {
    if (this.model.data)
    {
        return this.model.data
            .filter(f => f.name !== this.company_name.label)
            .map(d => ({label: d.name, value: d.id}))
    }
}

指导我如何实现这一目标。

【问题讨论】:

  • .filter(f => (f.name !== this.company_name.label && f.is_client === 1))
  • @thanksd 所以基本上我可以添加 && 多次?
  • 是的,它只是在传递给filter function 的匿名函数中向返回的布尔值添加一个条件。

标签: javascript vue.js vuejs2


【解决方案1】:

如果过滤器回调返回的值为真,则元素将被添加到过滤后的数组中,您可以根据需要使用多个布尔运算:

filteredCompanyOptions () {
  if (this.model.data) {
    return this.model.data
      .filter(f => f.name !== this.company_name.label && f.is_client === 1)
      .map(d => ({ label: d.name, value: d.id }))
  }
}

如果你的情况更复杂,你可以在回调的主体中做所有你需要的,然后返回一个布尔值:

filteredCompanyOptions () {
  if (this.model.data) {
    return this.model.data
      .filter(f => {
        if (f.name !== this.company_name.label && f.is_client === 1) {
          return true
        } else {
          return false
        }
      })
      .map(d => ({ label: d.name, value: d.id }))
  }
}

【讨论】:

  • f.is_client === 1 后面的右括号太多了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 2022-01-24
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多