0

我正在尝试使用“[ScheduledDate] < '11/1/2011'”的字符串值,并在“item”之类的对象上测试布尔值。但我似乎无法找到成功的方法。我不想使用 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;
    }
4

1 回答 1

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);
于 2012-06-18T18:23:17.617 回答