Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中模拟C#Lambda方法_Javascript_Jquery - Fatal编程技术网

在Javascript中模拟C#Lambda方法

在Javascript中模拟C#Lambda方法,javascript,jquery,Javascript,Jquery,我想模拟C#方法,该方法可用于确定集合是否有任何基于lambda表达式的匹配对象 我使用jQuery让事情变得更简单: Array.prototype.any = function (expr) { if (typeof jQuery === 'undefined') throw new ReferenceError('jQuery not loaded'); return $.grep(this, function (x, i) { retu

我想模拟C#方法,该方法可用于确定集合是否有任何基于lambda表达式的匹配对象

我使用jQuery让事情变得更简单:

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闭包。特别是,您在那里所做的工作可以通过使用以下方法在JS中本机完成:

编辑:在这种情况下,我们不是真正使用闭包,而是使用简单的匿名函数…

传入函数:

Array.prototype.any = function (expr) {

    if (typeof jQuery === 'undefined')
        throw new ReferenceError('jQuery not loaded');

    return $.grep(this, expr).length > 0;

};

var foo = [{ a: 1, b: 2 }, { a:1, b: 3 }];

console.log(foo.any(function(x, i){return x.a === 1})); //true
console.log(foo.any(function(x, i){return x.a === 2})); //false

不能传递函数而不是表达式字符串吗?这会对js更友好。@bfavaretto:我认为你的评论是一个很好的答案。@nhahtdh我太慢了,现在考虑到当前的答案,这将是毫无意义的。谢谢。他们应该称之为Any();-)谢谢通过这种方式,它将像@CAFxX提到的some()方法一样工作(我显然不知道)
Array.prototype.any = function (expr) {

    if (typeof jQuery === 'undefined')
        throw new ReferenceError('jQuery not loaded');

    return $.grep(this, expr).length > 0;

};

var foo = [{ a: 1, b: 2 }, { a:1, b: 3 }];

console.log(foo.any(function(x, i){return x.a === 1})); //true
console.log(foo.any(function(x, i){return x.a === 2})); //false