我试图在我的应用程序中使用简单比较器来过滤一些数据,而不是传递函数作为例如传递给[].filter
的筛选器。
比较器应该返回一个将成为筛选器的函数。
var comparator = function( a, b, c ) {
switch( b ){
case '>=': return function() { return this[a] >= c;}; break;
case '<=': return function() { return this[a] <= c;}; break;
case '<': return function() { return this[a] < c;}; break;
case '>': return function() { return this[a] > c;}; break;
case '=': return function() { return this[a] == c;}; break;
case '==': return function() { return this[a] === c;}; break;
case '!=': return function() { return this[a] != c;}; break;
default: return null;
};
}
假设我通过以下方式获得此函数:
var filterFn = comparator.apply({}, /(.+)(=|>=|<=|<|>|!=|==|!==)(.+)/.exec( "id<4" ).slice(1) );
someModel = someModel.objects.filter( filterFn );
目标是什么它会看起来像:
someModel.get = function( filter ){
return new Model(
this.objects.filter(
comparator.apply({}, /(.+)(=|>=|<=|<|>|!=|==|!==)(.+)/.exec( "id<4" ).slice(1)
)
);
};
var filtered = someModel.get( "id<4" );
问题是 - 我认为会有更多的运算符,但我不知道如何更简单地编写它。
使用Eval是不可能的。
这段代码既没有被执行也没有被测试,我只是写了出来以展示我的意思。
return
语句后面不需要加上break
语句。 - nnnnnn