Javascript动态调节

Javascript dynamic conditioning

本文关键字:调节 动态 Javascript      更新时间:2023-09-26

我想构建一个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 可能会导致漏洞。

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

请注意,JavaScript 运算符是 &&

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

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

怎么样

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

您可以将条件放在函数中,并将这些函数放在数组中。 这样您就可以在数组中执行循环并调用每个函数(条件)。

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");
}
在每个

条件下允许未定义是否有效?

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