我想模拟C#Any()方法,该方法可用于确定集合是否具有基于lambda表达式的任何匹配对象。在Javascript中模拟C#Lambda方法
我用jQuery的$.grep,使事情变得更加容易:
Array.prototype.any = function (expr) {
if (typeof jQuery === 'undefined')
throw new ReferenceError('jQuery not loaded');
return $.grep(this, function (x, i) {
return eval(expr);
}).length > 0;
};
var foo = [{ a: 1, b: 2 }, { a:1, b: 3 }];
console.log(foo.any('x.a === 1')); //true
console.log(foo.any('x.a === 2')); //false
我知道eval()
是不好的做法,原因是显而易见的。但是在这种情况下可以,因为我不会将这个与任何与用户输入有关的东西用到这里吗?
这可以在没有eval()
的情况下完成吗?我无法想出一个方法来将表达式传递给函数而不进行评估。
不能传递函数而不是表达式字符串吗?这会更友好。 – bfavaretto 2013-05-14 13:55:22
@bfavaretto:我认为你的评论是一个很好的答案。 – nhahtdh 2013-05-14 13:57:28
@nhahtdh我太慢了,现在的答案是没有意义的。 – bfavaretto 2013-05-14 14:04:20