【发布时间】:2013-05-14 13:53:13
【问题描述】:
我想模拟C#的Any()方法,可以根据一个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(),这可以做到吗?我想不出一种在不评估的情况下将表达式传递给函数的方法。
【问题讨论】:
-
你不能传递一个函数而不是一个表达式字符串吗?这样对 js 更友好。
-
@bfavaretto:我认为你的评论是一个很好的答案。
-
@nhahtdh 我太慢了,现在考虑到当前的答案,这将毫无意义。
标签: javascript jquery