私はC#Any()メソッドをシミュレートしたいと思います。これは、コレクションにラムダ式に基づいて一致するオブジェクトがあるかどうかを判断するのに使用できます。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
@bfavaretto:あなたのコメントは良い答えだと思います。 – nhahtdh
@nhahtdh私は遅すぎましたが、現在の答えを考えると無意味です。おかげさまで – bfavaretto