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

问题描述:

我正在使用多个||表达式的jQuery搜索方法,其中任何一个都可以返回true以显示结果。我的目标是要检索的实际评估,以true的表达式:jquery过滤器以及返回表达式的计算结果为真

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.nameitem.description,评估为true

编辑与例如:

在我itemAry我可以有

{item1: {name: "foo", description: "bar"}, item2: {name:"baz", description:"bar"}} 

所以,如果我搜索“富” - 我想不仅归还物品1对象,而且还让我知道这是表达item.name.toLowerCase().indexOf(that.search.toLowerCase())>=0评估为true

+0

不知道你的意思是什么:*我想不仅过滤** **结果返回真实的,但以**也**知道它是[propertyname] * - 你能否提供一个用例(即一些调用代码以及你将如何使用结果)。 –

+0

所以现在它作为一个基本的过滤器,如果任何表达式的计算结果为真,它将返回匹配任何表达式的数组中的项目。我想深入一层,并告诉我哪个特定的表达式导致结果评估为真,所以在这里的两个选项中,我想知道是哪个选项使它成真。希望这是有道理的 – asalgan

一种方法是将存储你发现它在该领域:

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) 
}) 
+0

我试图让这个工作,我觉得它在正确的路径和console.log返回正确的结果,但我似乎无法得到它返回正确的筛选项目集 – asalgan

+0

编辑:刚刚得到它的这个工作: 'return searchResults.map(function(result){ return(result.item) });' Thanks! – asalgan

如果没有改变对象(添加一个新的对象的关键),或再次检查循环,这是不可能的。

逻辑运算符不会那样工作。

要添加一个新的密钥只需将两个添加到对象,因为一个简单的& &将无法​​正常工作(您实际上同时使用AND和XOR)。