Подтвердить что ты не робот

JavaScript/jQuery эквивалент LINQ Any()

Есть ли эквивалент IEnumerable.Any(Predicate<T>) в JavaScript или jQuery?

Я проверяю список элементов и хочу разорвать раннее, если обнаружена ошибка. Я мог бы сделать это с помощью $.each, но мне нужно использовать внешний флаг, чтобы узнать, действительно ли элемент найден:

var found = false;
$.each(array, function(i) {
    if (notValid(array[i])) {
        found = true;
    }
    return !found;
});

Что было бы лучше? Мне не нравится использовать plain for с массивами JavaScript, потому что он выполняет итерацию по всем своим членам, а не только значениям.

4b9b3361

Ответ 1

В эти дни вы действительно можете использовать Array.prototype.some (specced в ES5), чтобы получить тот же эффект:

array.some(function(item) {
    return notValid(item);
});

Ответ 2

Вы можете использовать вариант функции jQuery is, которая принимает предикат:

$(array).is(function(index) {
    return notValid(this);
});

Ответ 3

Вы должны использовать обычный цикл for (не for ... in), который будет циклически проходить через элементы массива.

Ответ 4

Ответ "Сон" правильный. Чтобы расширить его ответ:

jQuery .is(function) имеет такое же поведение, как .NET IEnumerable.Any(Predicate<T>).

Из http://docs.jquery.com/is:

Проверяет текущий выбор на выражение и возвращает true, если хотя бы один элемент выбора подходит к данному выражению.

Ответ 5

Я предлагаю вам использовать метод $.grep(). Он очень близок к IEnumerable.Any(Predicate<T>):

$.grep(array, function(n, i) {
  return (n == 5);
});

Вот вам рабочий пример: http://jsfiddle.net/ErickPetru/BYjcu/.

Ответ 6

Я предлагаю вам попробовать цикл JavaScript for in. Однако имейте в виду, что синтаксис сильно отличается от того, что вы получаете с .net IEnumerable. Вот небольшой пример иллюстративного кода.

var names = ['Alice','Bob','Charlie','David'];
for (x in names)
{
    var name = names[x];
    alert('Hello, ' + name);
}

var cards = { HoleCard: 'Ace of Spades', VisibleCard='Five of Hearts' };
for (x in cards)
{
    var position = x;
    var card = card[x];
    alert('I have a card: ' + position + ': ' + card);
}