every() и some()
Методы every()
и some()
являются предикатами массива: они применяют указанную функцию-предикат к элементам массива и возвращают true или false. Метод every()
напоминает математический квантор всеобщности ∀
: он возвращает true
, только если переданная вами функция-предикат вернула true
для всех элементов массива:
a = [1,2,3,4,5];
a.every(function(x) { return x < 10; }) // => true: все значения < 10.
a.every(function(x) { return x % 2 === 0; }) // => false: не все четные.
Метод some()
напоминает математический квантор существования ∃
: он возвращает true, если в массиве имеется хотя бы один элемент, для которого функция-предикат вернет true
, а значение false
возвращается методом, только если функция-предикат вернет false
для всех элементов массива:
a = [1,2,3,4,5];
a.some(function(x) { return x%2===0; }) // => true: имеются четные числа.
a.some(isNaN) // false
___________________________________________________
Оба метода, every()
и some()
, прекращают обход элементов массива, как только результат становится известен.
Метод some()
возвращает true
/ false
на каждой итерации. Как только метод вернул true
, итератор прекращает работу и возвращает true
. (Например, если на первой итерации - true
- то работа прекращается, и последующих итераций не будет). Иначе, если ни на одном шаге не вренется true
, вернется false
.
Метод every()
работает аналогично some()
. Но логика обратна. Он работает до тех пор, пока функция возвращает true
.
P.S: В соответствии с правилами математики для пустого массива метод every()
возвращает true
, а метод some() возвращает false
.