В этом уроке вы узнаете, как проверить, все ли элементы массива проходят проверку, используя перебирающий метод JavaScript Array every()
.
Проверка элементов массива с помощью цикла for
Иногда вам нужно проверить, удовлетворяет ли каждый элемент массива заданному условию.
Как правило, вы используете цикл for
для перебора всех элементов и проверки каждого отдельного элемента на соответствие условию. Предположим, что у вас есть массив numbers
с тремя элементами:
let numbers = [1, 3, 5];
Следующий код проверяет, является ли каждый элемент в массиве numbers
больше нуля:
let numbers = [1, 3, 5]; let result = true; for(let i = 0; i < numbers.length; i++) { if(numbers[i] <= 0) { result = false; break; } } console.log(result);
Выход:
true
Как это работает:
- Во-первых, инициализируйте переменную
result
значениемtrue
. - Во-вторых, выполните итерацию по элементам массива
numbers
и проверьте, меньше ли каждый элемент или равен нулю. Если это так, установите для переменнойresult
значениеfalse
и немедленно завершите цикл, используя операторbreak
. В случае, если ни один элемент не меньше или равен нулю, значениеresult
переменной остаетсяtrue
.
Этот код прост и прямолинеен. Однако он достаточно многословен.
Тип JavaScript Array
предоставляет метод every()
, который позволяет вам проверить, прошел ли тест каждый элемент массива, более коротким и понятным способом.
Начиная с ES5, тип JavaScript Array предоставляет метод every()
, который проверяет каждый элемент в массиве.
В следующем примере функция every()
используется для проверки того, что каждый элемент массива чисел больше нуля:
let numbers = [1, 3, 5]; let result = numbers.every(function(e) { return e > 0; }); console.log(result);
Выход:
true
Используя стрелочные функции ES6, код может быть еще короче:
let numbers = [1, 3, 5]; let result = numbers.every( e => e > 0); console.log(result);
Синтаксис:
arrayObject.every(callback[, thisArg])
Метод every()
принимает два именованных аргумента: callback
и thisArg
.
1) Аргумент callback
callback
— это функция, которая проверяет каждый элемент массива. Функция callback()
имеет следующий вид:
function callback(currentElement, index, array){ //... }
Функция callback()
принимает три аргумента:
- Во-первых,
currentElement
— это текущий обрабатываемый элемент. - Во-вторых,
index
— это индексcurrentElement
. - В-третьих,
array
— это массив, к которому был вызван методevery()
.
Аргумент currentElement
является обязательным, тогда как аргументы index
и array
являются необязательными.
2) Аргумент thisArg
Аргумент thisArg
метода every()
является необязательным. Если вы передадите аргумент thisArg
в метод, значение this
внутри функции callback
будет ссылаться на аргумент thisArg
.
Метод возвращает значение true
, если функция callback
возвращает истинное значение для каждого элемента массива; в противном случае возвращается false
.
Обратите внимание, что метод
every()
выполняетcallback()
для каждого элемента в массиве, пока не найдет тот, из-за которого функцияcallback()
возвращает ложное значение.
Другими словами, функция перестанет вызывать callback()
и вернет false
, как только появится элемент массива, из-за которого функция callback()
вернет ложное значение.
Другие примеры
В следующем примере проверяется, являются ли все элементы массива четными числами.
let numbers = [1, 3, 5]; let isEven = numbers.every(function(e) { return e % 2 == 0; }); console.log(isEven);
Выход:
false
Напротив, в следующем примере проверяется, являются ли все элементы массива нечетными числами.
let numbers = [1, 3, 5]; let isOdd = numbers.every(function(e) { return Math.abs(e % 2) == 1; }); console.log(isOdd);
Выход:
true
Предположим, что у вас есть объект с двумя свойствами: min
и max
:
let range = { min: 0, mas: 10 };
В следующем примере проверяется, находятся ли все элементы в массиве numbers
в диапазоне, заданном min
и max
значением объекта range
.
let numbers = [1, 3, 5]; let range = { min: 0, max: 10 }; let isInRange = numbers.every(function(e) { return e >= this.min && e <= this.max; }, range);
Выход:
true
В этом примере мы передаем объект range
методу every()
в качестве второго аргумента. И внутри функции callback()
мы ссылаемся на объект range
, используя ключевое слово this
.
Внимание: пустые массивы
Если вы вызываете метод every()
для пустого массива, метод всегда будет возвращать значение true
для любого условия. Например:
let gtZero = [].every(e => e > 0); // any condition let ltZero = [].every(e => e < 0); // any condition console.log('gtZero:', gtZero); console.log('ltZero:', ltZero);
Выход:
gtZero: true ltZero: true
В этом руководстве вы узнали, как использовать метод JavaScript Array every()
, чтобы проверить, проходят ли все элементы в массиве тест, предоставляемый тестовой функцией.