我使用带有多个||
表达式的jQuery搜索方法,其中任何一个都可以返回true
以显示结果。我的目标是检索实际评估的哪个表达式为true
:
return this.itemAry.filter(function(item){
var that = this;
return (
item.name.toLowerCase().indexOf(that.search.toLowerCase())>=0 ||
item.description.toLowerCase().indexOf(that.search.toLowerCase())>=0
)
});
因此,如果item.name
评估为true
,我不仅要过滤返回true
的结果,还要知道它是item.name
} item.description
评估为true
。
使用示例编辑:
在我的itemAry中我可以拥有
{item1: {name: "foo", description: "bar"}, item2: {name:"baz", description:"bar"}}
所以,如果我搜索" foo" - 我不仅要返回item1对象,还要让我知道正是这个表达式item.name.toLowerCase().indexOf(that.search.toLowerCase())>=0
评估为true
答案 0 :(得分:0)
说实话,没有更改对象(向对象添加新键)或循环再次检查是不可能的。
逻辑运算符不会那样工作。
要添加新密钥,只需将两者都添加到对象中,就像简单的&&不起作用(你实际上会使用AND和XOR)。
答案 1 :(得分:0)
一种方法是存储您找到的字段:
const searchResults = this.contractsAry
.map(function(item) {
return ({
item: item,
nameMatches: item.name.toLowerCase().indexOf(this.search.toLowerCase()) >= 0,
descriptionMatches: item.description.toLowerCase().indexOf(this.search.toLowerCase()) >= 0
})
}.bind(this))
.filter(function(item) {
return item.nameMatches || item.descriptionMatches
});
searchResults.forEach(function(result) {
console.log(result.item, result.nameMatches, result.descriptionMatches)
})