Javascript动态调节

时间:2015-02-03 10:41:18

标签: javascript

我想构建一个IF条件,它是根据获取的参数动态构建的。此外,预计这将作为插件构建 例如,学生对象有3个参数,称为年龄,姓名,phone_numbers。此外,还有一个选择对象的选项对象 在这种情况下,

if(student.age >option.age  & student.name == option.name & student.phonenumbers == option.phonenumbers ){
// do stuff 
}

如果缺少任何参数,则不应将其包括在条件中。例如,假设,如果option.name未定义,则if条件应准备如下,

if(student.age >option.age & student.phonenumbers == option.phonenumbers ){
    // do stuff 
    }  

此外,为什么需要这种东西,这里是一个(500个对象)学生对象的数组被迭代。上述条件可以分为单独条件,但迭代将乘以条件数!!!所以我正在寻找一种方法将所有条件添加到一个。

但是,我的方法是,将表达式创建为字符串,然后使用eval(..)执行它,但据我所知,使用eval可能会导致漏洞。

任何人都让我知道实现动态条件的方法。

4 个答案:

答案 0 :(得分:3)

请注意,JavaScript 运算符为&&

对于您的示例,这应该有效:

if((!student.age || student.age>option.age) && 
   (!student.name || student.name==option.name) &&
   (!student.phonenumbers || student.phonenumbers==option.phonenumbers)
  ) {
}

答案 1 :(得分:2)

怎么样

function testStudent(student,option) {
  var res = [];
  var test = true;
  if (student.age) res.push(student.age > option.age);
  if (student.name) res.push(student.name == option.name);
  if (student.phonenumbers) res.push(student.phonenumbers == option.phonenumbers);
  for (var i=0;i<res.length;i++) {
    test = test && res[i];
  }
  if (res.length > 0 && test) {
    //do stuff
  }
}

通用:

function testObjects(obj1,obj2) {

  for (var o in obj1) { // assuming obj2 is a superset of obj1
    if (o === "age" && obj1.age <= obj2.age) return false;
    if (obj1.hasOwnProperty(o) && obj1[o] != obj2[o]) return false;
  }
  return true;
}
var ok = testObjects(student,option);

答案 2 :(得分:1)

您可以在数组中使用函数和函数中的条件。所以你可以在数组中做一个循环并调用每个函数(条件)。

var aConds = [];
function firstCond(params) {return (params<0)};
function secondCond(params) {return(params!='hi')};
aConds.push(firstCond);
...
for(var i=0;i<aConds.length;i++)
{
  if(!aConds[i](params)) console.log("a condition has not been meet");
}

答案 3 :(得分:1)

在每种情况下都允许未定义吗?

if((student.age == undefined || student.age > option.age) && (student.name == undefined || student.name == option.name) ...