Learn JavaScript

every() - метод для проверки, подходят ли все элементы массива в JavaScript

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

Как только находится элемент, который условию не подходит, метод сразу останавливается и возвращает false.

Синтаксис

array.every(callback)
array.every(callback, thisArg)

callback - функция, которая проверяет каждый элемент массива.

Что делает every()

Метод проходит по массиву слева направо и вызывает callback для каждого элемента.

Если callback возвращает true для всех элементов, результатом будет true.

const numbers = [2, 4, 6];
const result = numbers.every((value) => value % 2 === 0);

console.log(result); // true

Здесь метод вернул true, потому что все элементы чётные.

Что возвращает every()

every() всегда возвращает булево значение:

  • true, если все элементы подходят под условие
  • false, если хотя бы один элемент не подошёл
const numbers = [2, 4, 5];

console.log(numbers.every((value) => value % 2 === 0)); // false

Аргументы callback

Callback в every() может получать до трёх аргументов:

array.every((element, index, array) => {
  // ...
});
  • element - текущий элемент
  • index - индекс текущего элемента
  • array - сам исходный массив

Пример:

const fruits = ["apple", "banana", "orange"];

const result = fruits.every((fruit, index) => {
  return index >= 0;
});

console.log(result); // true

every() останавливается на первом несовпадении

Как только найден элемент, который не проходит проверку, дальше массив уже не проверяется.

const numbers = [2, 4, 5, 8];
const result = numbers.every((value) => value % 2 === 0);

console.log(result); // false

Хотя дальше в массиве есть ещё значения, методу уже достаточно одного неподходящего элемента.

Проверка массива объектов

every() часто используют, когда нужно понять, у всех ли объектов есть нужное свойство или нужный статус.

const users = [
  { name: "Anna", active: true },
  { name: "Ivan", active: true },
];

const allActive = users.every((user) => user.active);

console.log(allActive); // true

every() не меняет исходный массив

Метод только проверяет элементы и не изменяет массив.

const numbers = [1, 2, 3];
const result = numbers.every((value) => value > 0);

console.log(numbers); // [1, 2, 3]
console.log(result);  // true

every() и some()

Эти методы похожи, но отвечают на разные вопросы.

const numbers = [2, 4, 5];

console.log(numbers.some((value) => value % 2 !== 0));  // true
console.log(numbers.every((value) => value % 2 === 0)); // false

some() проверяет, есть ли хотя бы одно совпадение.

every() проверяет, подходят ли все элементы.

every() и filter()

every() возвращает только true или false.

filter() возвращает новый массив элементов, которые подошли.

const numbers = [1, 2, 3, 4];

console.log(numbers.every((value) => value > 2));   // false
console.log(numbers.filter((value) => value > 2));  // [3, 4]

Если нужна именно проверка, every() обычно подходит лучше.

Пустой массив

Для пустого массива every() возвращает true.

const result = [].every((value) => value > 0);

console.log(result); // true

Это может выглядеть неожиданно, но считается нормальным поведением метода.

Пустые слоты

every() пропускает пустые слоты массива.

const arr = Array(3);
const result = arr.every((value) => value === undefined);

console.log(result); // true

Callback здесь вообще не вызовется.

Из-за этого результат иногда выглядит неожиданно.

Когда это полезно

every() удобно использовать, когда:

  • нужно проверить, подходят ли все элементы массива
  • нужно убедиться, что все объекты соответствуют условию
  • не нужен массив результатов, а нужна только проверка

Пример:

const products = [
  { name: "Phone", inStock: true },
  { name: "Laptop", inStock: true },
];

const allInStock = products.every((item) => item.inStock);

console.log(allInStock); // true

Частые ошибки

Думать, что every() возвращает найденный элемент

const numbers = [1, 2, 3];
const result = numbers.every((value) => value > 1);

console.log(result); // false

Это булево значение, а не элемент массива.

Путать every() и some()

const numbers = [2, 4, 5];

console.log(numbers.every((value) => value % 2 === 0)); // false

Если нужно проверить наличие хотя бы одного совпадения, нужен some().

Забывать, что пустые слоты пропускаются

const arr = Array(2);

console.log(arr.every((value) => value === undefined)); // true

Callback здесь не выполняется для пустых слотов.

Быстрая памятка

  • every() проверяет, подходят ли все элементы массива
  • метод возвращает true или false
  • every() останавливается на первом несовпадении
  • исходный массив не меняется
  • some() ищет хотя бы одно совпадение, а every() проверяет все элементы

Коротко

every() - это удобный способ проверить, выполняется ли условие для всех элементов массива. Главное, что стоит запомнить: метод возвращает только true или false и останавливается, как только находит первый неподходящий элемент.