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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...