Chciałbym zasymulować metodę C# Any(), która może być użyta do określenia, czy kolekcja ma jakiekolwiek pasujące obiekty oparte na wyrażeniu lambda.Symulowanie metod C# Lambda w JavaScript
użyłem jQuery $.grep aby ułatwić:
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
wiem, że eval()
jest złą praktyką z oczywistych powodów. Ale czy w tym przypadku jest w porządku, skoro nie użyję tego do niczego związanego z danymi wejściowymi użytkownika?
Czy można to zrobić bez eval()
? Nie mogę znaleźć sposobu na przekazanie wyrażenia do funkcji bez jego oceny.
Nie możesz przekazać funkcji zamiast ciągu wyrażenia? To byłoby bardziej przyjazne dla Js. – bfavaretto
@bfavaretto: Myślę, że twój komentarz stanowi dobrą odpowiedź. – nhahtdh
@nhahtdh Byłem zbyt wolny, teraz byłoby to bezcelowe, biorąc pod uwagę obecne odpowiedzi. – bfavaretto