我正在使用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
答案 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'))