我想构建一个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
可能会导致漏洞。
任何人都让我知道实现动态条件的方法。
答案 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) ...