В этом уроке вы узнаете, как проверить, все ли элементы массива проходят проверку, используя перебирающий метод 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(), чтобы проверить, проходят ли все элементы в массиве тест, предоставляемый тестовой функцией.
