我在表格上方有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;
但这样的排列将会失控。必须有一种更简单的方式来做到这一点。
有什么想法吗?
答案 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.
......等等。