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 に答える