Vorrei simulare il metodo C# Any(), che può essere utilizzato per determinare se una raccolta ha oggetti corrispondenti basati su un'espressione lambda.Simula metodi C# Lambda in Javascript
Ho usato jQuery di $.grep per rendere le cose più facili:
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
So che eval()
è cattiva pratica per ovvie ragioni. Ma va bene in questo caso, dal momento che non lo userò con qualcosa relativo ad alcuni input dell'utente?
Questo può essere fatto senza eval()
? Non riesco a capire un modo per passare un'espressione alla funzione senza valutarla.
Non è possibile passare una funzione anziché una stringa di espressione? Sarebbe più amichevole. – bfavaretto
@bfavaretto: Penso che il tuo commento sia una buona risposta. – nhahtdh
@nhahtdh Ero troppo lento, ora sarebbe inutile date le risposte attuali. – bfavaretto