我正在try 使用vue中的计算(computed)属性筛选array.js.我想搜索多个字段,名称,状态,标签等.

我的数据:

events: [
  {
    id: 1,
    name: 'Name of event',
    url: '#',
    datetime: '2017-05-10T00:00:00Z',
    description: 'The full text of the event',
    state: 'VIC',
    tags: [
      'ordinary',
      'advanced'
    ]
  },
  {
    id: 2,
    name: 'Another event',
    url: '#',
    datetime: '2017-05-12T00:00:00Z',
    description: 'The full text of the event',
    state: 'VIC',
    tags: [
      'beginner'
    ]
  },
  {
    id: 3,
    name: 'Great event',
    url: '#',
    datetime: '2017-05-18T00:00:00Z',
    description: 'The full text of the event',
    state: 'NSW',
    tags: [
      'beginner'
    ]
  }
]

},

以下功能按预期工作,但我无法确定如何让它在"标签"(注释掉)中搜索项目.

searchevents: function(){
  let result = this.events
  if (this.filterValue){
    result = result.filter(event =>
      event.name.toLowerCase().includes(this.filterValue.toLowerCase()) ||
      event.state.toLowerCase().includes(this.filterValue.toLowerCase())
      // event.tags.toLowerCase().values().includes(this.filterValue.toLowerCase())
    )
  }
  return result
}

下面返回一个空白数组,当我在angular而不是vue中执行此操作时,此方法可以正常工作.

searchevents2: function(){
  var searchRegex = new RegExp(this.filterValue,'i')
  this.events.filter(function(event){
    return !self.filterValue || searchRegex.test(event.name) || searchRegex.test(event.state)
  })
}

理想情况下,我希望能够列出要筛选的数组项,或者只按整个数组进行筛选.

感谢您的帮助,请先在这里发帖,温柔一点.我在Python方面的经验比Javascript丰富得多,因此有时可能会使用不正确的术语.

推荐答案

你离得不远.

对于searchEvents过滤器,只需添加标记过滤器.你可以这样做.

searchevents: function(){
    let result = this.events
    if (!this.filterValue)
      return result

    const filterValue = this.filterValue.toLowerCase()

    const filter = event => 
        event.name.toLowerCase().includes(filterValue) ||
        event.state.toLowerCase().includes(filterValue) ||
        event.tags.some(tag => tag.toLowerCase().includes(filterValue))

    return result.filter(filter)
}

Array.some()是一种标准数组方法,如果数组中的任何元素通过测试,它都会返回true.

searchevents2: function(){
    const searchRegex = new RegExp(this.filterValue,'i')
    return this.events.filter(event => 
      !this.filterValue || searchRegex.test(event.name) || searchRegex.test(event.state))
}

有了searchEvents2,你只剩下了一个错误的self.要么在执行过滤器之前设置self,要么像我在这里所做的那样,将其转换为箭头函数.

Example

Vue.js相关问答推荐

Vuetify快速失败不会阻止发送表单

通过元素加中的正则表达式输入电话号码格式

组合 API | Vue 路由参数没有被监视

如何从mustache内的过滤器输出html

使用 Laravel 作为后端刷新 Vue.js SPA 的身份验证令牌

vuejs:将props传递给javascript中的组件?

Vue:在表格中显示嵌套数据

如何将 vue.js 与 gulp 一起使用?

eslint – 如何知道 defined定义规则的位置

如何在 vue 3 脚本设置中使用

如何在 Vue.js 中传递 $router.push 中的数据?

如何使表格行可点击并展开行 - vue.js - element-ui

我可以在 Vue 实例方法中传播的 mapMutations 中使用this吗?

在Vue.js中从父组件执行子方法

即使在生产模式下构建,VueJS 也会显示开发模式开发模式消息

输入文件 Select 事件在 Select 同一文件时未触发

模块构建失败:错误:没有给出解析器和文件路径,无法在 nuxtjs 中推断出解析器

Vue3在按钮单击时以编程方式创建组件实例

在 Vue 单元测试中单击按钮时触发表单提交

如何在 Vue.js 2 应用程序中模拟 onbeforeunload?