想知道这是否可以用
Javascript做?
我有一组条件,这是一组报告的过滤条件
只是说这些是可能的过滤条件:(有点伪代码,不要担心实际的JSON结构),
'job' = 'developer' 'job' = 'tester' 'job' = 'manager' 'salary' = 'hourly' 'salary' = 'weekly' 'salary' = 'monthly' 'office' = 'downstairs' 'office' = 'upstairs' 'office' = 'remote'
现在我想让用户过滤数据,例如Employee哪个工作是开发人员或每小时工作的测试人员
if ('salary' == 'hourly' && ('job' == 'tester' || 'job' == 'developer')){ return true; }
但是如果用户想要为过滤器添加额外的维度,例如,最重要的是,过滤远程工作的员工,例如office =’remote’
我必须写类似的东西
if ('salary' == 'hourly' && ('job' == 'tester' || 'job' == 'developer') && ('office' == 'remote')){ return true; }
我的问题是,是否有可能通过迭代一系列过滤标准来构建这些AND条件,而不是像我上面所做的那样手动拼写它们?
任何帮助,将不胜感激.
解决方法
jsFiddle Demo
我将构造由键和值发送的参数,例如:
var terms = []; terms.push({'job':'developer'}); terms.push({'job':'tester'}); terms.push({'job':'manager'}); terms.push({'salary':'hourly'}); terms.push({'salary':'weekly'}); terms.push({'salary':'monthly'}); terms.push({'office':'downstairs'}); terms.push({'office':'upstairs'}); terms.push({'office':'remote'});
使用json数据应该很容易做到这一点.接下来,我将准备一个包含样本数据的值对象,如下所示:
var values = { job: 'tester',salary: 'monthly',office: 'onsite' };
哪个也应该易于从json操纵.考虑到这些,这些术语可以迭代并放入桶中.每个桶都将自行配备.该存储桶的每个结果都将自行处理.最终的结果将是整体的真实性.在演示中,请查看控制台中的一些复选标记日志.
function test(terms,values){ var sets = {}; for(var i in terms) { for(var term in terms[i]){ sets[term] = sets[term] || []; sets[term].push(terms[i][term]); } } var truthValues = []; for(var key in sets){ var truth = false; for(var val in sets[key]){ console.log(values[key] +" == "+sets[key][val]); truth |= values[key] == sets[key][val]; } truthValues.push(truth); } console.log(truthValues); var endTruth = true; for(var bool in truthValues){ endTruth &= truthValues[bool]; } return endTruth; } console.log(test(terms,values));