通过javascript中的逻辑AND操作过滤多个属性

时间:2015-11-19 20:22:57

标签: javascript

我在表格上方有4个复选框,用户可以用它来过滤表格中的项目。

我目前正在使用Array.prototype.filter过滤结果,但我确定其中的逻辑不正确。

我现在拥有的过滤器基本上是:

// Note: a, b, c, and d are booleans representing the checked 
//  state of each checkbox. They essentially map to a property on each 
//  object in the array.
arry.filter(function(i) {
  if(a) return i.hasA;
  if(b) return i.hasB;
  if(c) return i.hasC;
  if(d) return i.hasD;
});

这里的结果不是我想要的。我想做类似的事情:

if(a && b && c && d) return i.hasA && i.hasB && i.hasC && i.hasD;

但这样的排列将会失控。必须有一种更简单的方式来做到这一点。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

arry.filter(function(i) {
  return (!a || i.hasA) &&
         (!b || i.hasB) &&
         (!c || i.hasC) &&
         (!d || i.hasD);
});

让我们来看看四个测试中的第一个。

如果" A"未经检查(即a为假),然后测试通过。或者,如果" A"检查(即a为真),然后我们要求i.hasA为真,以便测试通过。

同样,取消选中b,或i必须拥有属性B.

......等等。