Ответ 1
В эти дни вы действительно можете использовать Array.prototype.some
(specced в ES5), чтобы получить тот же эффект:
array.some(function(item) {
return notValid(item);
});
Есть ли эквивалент 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, потому что он выполняет итерацию по всем своим членам, а не только значениям.
В эти дни вы действительно можете использовать Array.prototype.some
(specced в ES5), чтобы получить тот же эффект:
array.some(function(item) {
return notValid(item);
});
Вы можете использовать вариант функции jQuery is
, которая принимает предикат:
$(array).is(function(index) {
return notValid(this);
});
Вы должны использовать обычный цикл for
(не for ... in
), который будет циклически проходить через элементы массива.
Ответ "Сон" правильный. Чтобы расширить его ответ:
jQuery .is(function)
имеет такое же поведение, как .NET IEnumerable.Any(Predicate<T>)
.
Проверяет текущий выбор на выражение и возвращает true, если хотя бы один элемент выбора подходит к данному выражению.
Я предлагаю вам использовать метод $.grep()
. Он очень близок к IEnumerable.Any(Predicate<T>)
:
$.grep(array, function(n, i) {
return (n == 5);
});
Вот вам рабочий пример: http://jsfiddle.net/ErickPetru/BYjcu/.
Я предлагаю вам попробовать цикл 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);
}
Вы можете использовать array.filter(IE 9+ см. ссылку ниже для более подробной информации)
[].filter(function(){ return true|false ;}).length > 0;
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
С https://www.npmjs.com/package/manipula, который реализует все методы С# LINQ, это будет:
Manipula.from([0,1]).any(x=>x>0)