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 и останавливается, как только находит первый неподходящий элемент.