如何使用对象属性,运算符和值的字符串表示?

时间:2012-06-18 17:55:46

标签: javascript object eval

我正在尝试使用字符串值“,[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;
    }

1 个答案:

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