Перебирающий метод Array every() в JavaScript

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

Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript