jquery过滤器以及返回计算结果为true的表达式

时间:2017-10-11 16:20:28

标签: javascript

我使用带有多个||表达式的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

2 个答案:

答案 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)
})