微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何为未知数量的条件编写多个AND子句

想知道这是否可以用 Javascript做?

我有一组条件,这是一组报告的过滤条件

只是说这些是可能的过滤条件:(有点伪代码,不要担心实际的JSON结构),

'job' = 'developer'
'job' = 'tester'
'job' = 'manager'

'salary' = 'hourly'
'salary' = 'weekly'
'salary' = 'monthly'

'office' = 'downstairs'
'office' = 'upstairs'
'office' = 'remote'

现在我想让用户过滤数据,例如Employee哪个工作是开发人员或每小时工作的测试人员

在这种情况下,我会有一个像这样的JavaScript

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));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐