В 2009, ECMAScript 5 представил новые методы для работы с массивами. Некоторые из них стали популярны, например indexOf(), forEach(), map(), и filter(). А вот some() и every() повезло меньше. Именно о них мы сегодня и поговорим.

Array.prototype.some()

Метод some() проверяет удовлетворяет ли заданному условию хотя бы один элемент массива. Он возвращает false только в случае если ни один из элементов массива не удовлетворяет заданному условию:

function isNegative(x) {
  return x < 0;
}

[-10, 0, 10].some(isNegative) === true;
[1, 2, 3, 4].some(isNegative) === false;

Используя введенные в ECMAScript 2015 стрелочные функции мы можем переписать callback функцию, сделав код более читаемым:

[-10, 0, 10].some(x => x < 0) === true ;
[1, 2, 3, 4].some(x => x < 0) === false;

Обратите внимание, что some() прекращает итерировать массив как только встречает первый элемент удовлетворяющий условию. В таком случае он сразу возвращает true без проверки остальных элементов.

Array.prototype.every()

Метод every() проверяет, удовлетворяют ли условию все элементы массива:

[-10, 0, 10].every(x => x < 0) === false;
[-10, 0, 10].every(x => x >= 0) === false;

[1, 2, 3, 4].every(x => x < 0) === false;
[1, 2, 3, 4].every(x => x >= 0) === true;

Так же как и в случае с some(), выполнение every() может быть прекращено досрочно. Как только every() встретит элемент не удовлетворяющий условию он вернет false и не станет проверять оставшиеся элементы.

Дополнительные параметры

Callback-функции обоих методов и some() и every() принимают на вход три элемента: текущий элемент массива, его индекс и непосредственно сам массив. Вы можете использовать эти параметры для того, чтобы определить, что нужно вернуть true или false:

function predicate(element, index, array) {
  // ...
}

Как и другие методы прототипа Array, some() и every() принимают на вход дополнительный второй параметр thisArg. Он определяет, что использовать в качестве this при выполнении callback функции.

Поддержка браузерами и полифиллы

Учитывая, что ECMAScript 5 был представлен еще в 2009 году, то не удивительно, что сегодня он обладает хорошей поддержкой со стороны браузеров. Начиная с IE 9, все современные браузеры поддерживают методы some() и every(). Тем не менее, если вам потребуется поддержка более старых браузеров, то вы сможете легко найти полифиллы для них, добавляющие методы прототипу Array:

Was this helpful?