数组中的Vue.js搜索关键字

时间:2018-11-13 08:14:13

标签: javascript html css vue.js

我正在使用Vue.js通过输入字段来过滤JSON数组中的项目。该阵列由手机组成。

看三星的阵列,我有三星Galaxy S5,三星Galaxy S6等。

现在,当我键入:Samsung时,我会得到所有三星的列表。键入Galaxy S5时,会得到Samsung Galaxy S5。但是当我输入Samsung S5时,我什么也没得到,因为在“ Samsung”和“ S5”之间有“ Galaxy”。

我希望有人可以帮我解决这个问题。

我的代码:

m <- matrix(1:6, nrow = 2, ncol = 3)
m
#       [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6

m[m>=4] <- 0 # every value which is >=4 will be set to zero
m
#       [,1] [,2] [,3]
# [1,]    1    3    0
# [2,]    2    0    0

3 个答案:

答案 0 :(得分:4)

您可以拆分搜索关键字,并使用every检查标题中是否存在每个单词,如果标题中存在每个单词,则返回true。

var app = new Vue({
  el: '#app',
  data: {
    keyword: '',
    samsungList: []
  },
  computed: {
    samsungFilteredList() {
      return this.samsungList.filter((samsung) => {
        return this.keyword.toLowerCase().split(' ').every(v => samsung.title.toLowerCase().includes(v));
      });
    }
  }
});

答案 1 :(得分:3)

您的要求是部分搜索,因为includes是不正确的方法,因为它会寻找完全匹配的内容。您可以使用indexOf

 let filteredResult = array.filter((i) => i.indexOf(this.keyword.toLowerCase()) > -1); // this will serve your purpose.

答案 2 :(得分:0)

您可以在“ samsungFilteredList”中使用“ getMatchingResults()”方法,如下所示

var samsungList = ["Samsung Galaxy S5", "Samsung Galaxy S6"]

function getMatchingResults(input) {
 return samsungList.filter(d => input.split(' ').every(v => d.toLowerCase().includes(v.toLowerCase())))
}

console.log(getMatchingResults('samsung'))

console.log(getMatchingResults('samsung s5'))

console.log(getMatchingResults('galaxy'))