我正在尝试使用字符串值“,[ScheduledDate]< '11 / 1/2011'”,并测试像“item”这样的对象的bool值。但我似乎无法想办法成功地做到这一点。我不想使用eval函数,但如果这是唯一的方法,那么我想我将不得不这样做。下面是我正在尝试使用的函数的示例。
function _filterItem2() {
var item = { ScheduledDate: '1/1/2012' };
var filterExpression = "[ScheduledDate] < '11/1/2011'";
var result = item[filterExpression]; // This is where I'm not sure.
return result;
}
答案 0 :(得分:2)
不,item[filterExpression]
只会返回名称与您的字符串相同的属性。
相反,您应该将过滤器表达式存储为对象:
var filter = {
propname: "ScheduledDate",
operator: "<",
value: "1/1/2012"
};
然后得到你的比较值:
var val1 = item[filter.propname],
val2 = filter.value;
现在是棘手的部分。你是对的,你不应该使用eval。但是不可能从操作员名称中获取相应的函数,因此您需要自己编写代码。您可以使用switch
语句或这样的地图:
var operators = {
"<": function(a,b){return a<b;},
">": function(a,b){return a>b;},
...
};
var bool = operators[filter.operator](val1, val2);