Как проверить каждый элемент массива
Перейти к содержимому

Как проверить каждый элемент массива

  • автор:

Проверить каждый элемент массива на удовлетворение условию

Реализуй функцию every(arr, func) , которая принимает аргументами массив arr и функцию func . Возвращает true , если функция func вернет для каждого элемента массива true . Иначе every возвращает false

Пример проверки что все элементы массива — строки:

every(['mama', 'mila', 'ramu'], function (arrayItem) < return typeof arrayItem === 'string' >)

Проверка что все числа из массива больше 42

every([20, 56, 17], function (arrayItem) < return arrayItem > 42 >)

В функцию func нужно передавать аргументами соответственно элемет массива, индекс элемента массива и сам массив.

every(['mama', 'mila', 'ramu'], function (arrayItem, index, array) < console.log(arrayItem, index, array) return true >)

Array.prototype.every()

Метод every() проверяет, удовлетворяют ли все элементы массива условию, заданному в передаваемой функции.

Примечание: метод возвращает true при любом условии для пустого массива.

Синтаксис

arr.every(callback(currentValue[, index[, array]])[, thisArg])

Параметры

Функция проверки каждого элемента, принимает три аргумента:

Текущий обрабатываемый элемент массива.

Индекс текущего обрабатываемого элемента массива.

Массив, по которому осуществляется проход.

Необязательный параметр. Значение, используемое в качестве this при выполнении функции callback .

Возвращаемое значение

true если функция проверки возвращает truthy значение для каждого элемента массива. Иначе, false .

Описание

Метод every() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдёт такой, для которого callback вернёт ложное значение (значение, становящееся равным false при приведении его к типу Boolean ). Если такой элемент найден, метод every() немедленно вернёт false . В противном случае, если callback вернёт true для всех элементов массива, метод every() вернёт true . Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.

Функция callback вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.

Если в метод every() был передан параметр thisArg , при вызове callback он будет использоваться в качестве значения this . В противном случае в качестве значения this будет использоваться значение undefined . В конечном итоге, значение this , наблюдаемое из функции callback , определяется согласно обычным правилам определения this , видимого из функции.

Метод every() не изменяет массив, для которого он был вызван.

Диапазон элементов, обрабатываемых методом every() , устанавливается до первого вызова функции callback . Элементы, добавленные в массив после начала выполнения метода every() , не будут посещены функцией callback . Если существующие элементы массива изменятся, значения, переданные в функцию callback , будут значениями на тот момент времени, когда метод every() посетит их; удалённые элементы посещены не будут.

Метод every() действует подобно квантору всеобщности в математике. В частности, он вернёт true для пустого массива. Это так называемая бессодержательная истина (vacuously true) — все элементы пустого множества (англ.) удовлетворяют любому заданному условию.

Примеры

Пример: проверка размера всех элементов массива

Следующий пример проверяет, являются ли все элементы массива числами, большими 10.

function isBigEnough(element, index, array)  return element >= 10; > [12, 5, 8, 130, 44].every(isBigEnough); // false [12, 54, 18, 130, 44].every(isBigEnough); // true 

Пример: использование стрелочных функций

Стрелочные функции предоставляют более краткий синтаксис для подобных проверок.

[12, 5, 8, 130, 44].every((elem) => elem >= 10); // false [12, 54, 18, 130, 44].every((elem) => elem >= 10); // true 

Полифил

Метод every() был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может не присутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать every() в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; и предполагает что Object и TypeError имеют свои первоначальные значения и что callback.call вычисляется в оригинальное значение Function.prototype.call() .

if (!Array.prototype.every)  Array.prototype.every = function (callbackfn, thisArg)  "use strict"; var T, k; if (this == null)  throw new TypeError("this is null or not defined"); > // 1. Положим O равным результату вызова ToObject над значением // this, переданным в качестве аргумента. var O = Object(this); // 2. Положим lenValue равным результату вызова внутреннего метода Get // объекта O с аргументом "length". // 3. Положим len равным ToUint32(lenValue). var len = O.length >>> 0; // 4. Если IsCallable(callbackfn) равен false, выкинем исключение TypeError. if (typeof callbackfn !== "function")  throw new TypeError(); > // 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined. if (arguments.length > 1)  T = thisArg; > // 6. Положим k равным 0. k = 0; // 7. Пока k < len, будем повторятьwhile (k  len)  var kValue; // a. Положим Pk равным ToString(k). // Это неявное преобразование для левостороннего операнда в операторе in // b. Положим kPresent равным результату вызова внутреннего метода // HasProperty объекта O с аргументом Pk. // Этот шаг может быть объединён с шагом c // c. Если kPresent равен true, то if (k in O)  // i. Положим kValue равным результату вызова внутреннего метода Get // объекта O с аргументом Pk. kValue = O[k]; // ii. Положим testResult равным результату вызова внутреннего метода Call // функции callbackfn со значением T в качестве this и списком аргументов, // содержащим kValue, k и O. var testResult = callbackfn.call(T, kValue, k, O); // iii. Если ToBoolean(testResult) равен false, вернём false. if (!testResult)  return false; > > k++; > return true; >; > 

Спецификации

Specification
ECMAScript Language Specification
# sec-array.prototype.every

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

  • Array.prototype.forEach()
  • Array.prototype.some()
  • Array.prototype.find()
  • TypedArray.prototype.every() (en-US)

Метод every

Метод every проверяет элементы массива в соответствии с переданной функцией. Метод возвращает true , если для всех элементов массива переданная функция вернет true , в противном случае метод возвращает false .

В функцию можно передавать три параметра. Если эти параметры есть (они не обязательны), то в первый автоматически попадет элемент массива, во второй попадет его номер в массиве (индекс), а в третий — сам массив.

Синтаксис

массив.every(function(элемент, индекс, массив) < return true или false; >);

Пример

Проверим, что все элементы в массиве чисел положительные:

let arr = [1, 2, 3, 4, 5]; let check = arr.every(function(elem) < if (elem >= 0) < return true; >else < return false; >>); console.log(check);

Результат выполнения кода:

Пример

Проверим, что произведение элемента на его порядковый номер всегда меньше 30 :

let arr = [1, 2, 3, 4, 5]; let check = arr.every(function(elem, index) < if (elem * index < 30) < return true; >else < return false; >>); console.log(check);

Результат выполнения кода:

Пример

При необходимости в третий параметр можно передать сам массив:

let check = arr.every(function(elem, index, arr) < тут будет доступен массив arr >);

Смотрите также

  • метод some ,
    который также позволяет выполнить проверку массива
  • методы map и forEach ,
    которые позволяют применить функцию к каждому элементу массива
  • методы reduce и reduceRight ,
    сворачивающие массив к одному значению

.every ( )

Проверить по списку, что все сделали домашнее задание? Проще простого с массивами и методом every .

Время чтения: меньше 5 мин

Открыть/закрыть навигацию по статье
Контрибьюторы:

Обновлено 29 мая 2022

Кратко

Скопировать ссылку «Кратко» Скопировано

Метод массива .every ( ) позволяет узнать, удовлетворяют ли все элементы в массиве условию в функции-колбэке. Результатом вызова метода .every ( ) будет boolean-значение true или false . Если хотя бы один элемент не будет удовлетворять условию, то результат будет false .

Пример

Скопировать ссылку «Пример» Скопировано

Данные представляют собой информации о пользователях с именем и флагом, онлайн ли сейчас пользователь:

 const users = [ < name: 'Анна', online: true >, < name: 'Михаил', online: true >, < name: 'Саша', online: true >,] const users = [  name: 'Анна', online: true >,  name: 'Михаил', online: true >,  name: 'Саша', online: true >, ]      

Проверка, что все пользователи сейчас онлайн, вернёт true :

 const isAllUsersOnline = users.every(user =>  return user.online>)console.log(isAllUsersOnline)// true const isAllUsersOnline = users.every(user =>  return user.online >) console.log(isAllUsersOnline) // true      

Проверка, что всех пользователей зовут «Анна», вернёт false :

 const isAllUsersAnna = users.every(user =>  return user.name === 'Анна'>)console.log(isAllUsersAnna);// false const isAllUsersAnna = users.every(user =>  return user.name === 'Анна' >) console.log(isAllUsersAnna); // false      

Как пишется

Скопировать ссылку «Как пишется» Скопировано

В метод .every ( ) необходимо передать колбэк-функцию, которая должна возвращать boolean-значение, аналогично методам Array.filter или Array.some. Возвращать можно и другие truthy и falsy значения, они преобразуются согласно типу.

Функция, которую мы передаём в метод .every ( ) , может принимать три параметра:

  • item — элемент массива в текущей итерации;
  • index — индекс текущего элемента;
  • arr — сам массив, который мы перебираем.
 const balls = ['��', '��', '��', '��'] const areAllBallsAreGreen = balls.every((ball, index, arr) => ball === '��')// true const balls = ['��', '��', '��', '��'] const areAllBallsAreGreen = balls.every((ball, index, arr) => ball === '��') // true      

Как понять

Скопировать ссылку «Как понять» Скопировано

Метод .every ( ) позволяет решить задачу, когда необходимо узнать, что все элементы в массиве соответствуют условию. Метод, по сути, противоположен .some(). В .every ( ) , чтобы результат выражения стал true , необходимо, чтобы все элементы удовлетворяли условию функции-предиката.

Для сравнения напишем пример через for или while :

 const nums = [10, 303, 16, 20, 21] let areGreater = true;for (let i = 0; i < nums.length; i++)  if (nums[i] < 10)  areGreater = false break >> const nums = [10, 303, 16, 20, 21] let areGreater = true; for (let i = 0; i  nums.length; i++)  if (nums[i]  10)  areGreater = false break > >      

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

 const nums = [10, 303, 16, 20, 21] const areGreater = nums.every(num => num >= 10)console.log(areGreater);// true const nums = [10, 303, 16, 20, 21] const areGreater = nums.every(num => num >= 10) console.log(areGreater); // true      

В примерах код был написан с помощью двух разных подходов: императивного и декларативного. Использование метода .every ( ) делает код декларативнее.

На практике

Скопировать ссылку «На практике» Скопировано

Егор Огарков советует

Скопировать ссылку «Егор Огарков советует» Скопировано

�� Из-за того, что результат выполнения метода Array . every – это boolean-значение, метод можно удобно использовать прямо в условных конструкциях:

 const drinks = ['��', '��', '��', '��', '��'] if (drinks.every(drink => drink === '��'))  console.log('This is a beer party! ��')> const drinks = ['��', '��', '��', '��', '��'] if (drinks.every(drink => drink === '��'))  console.log('This is a beer party! ��') >      

Но следует помнить, что проверка пустого массива всегда вернёт true

 const drinks = [] if (drinks.every(drink => drink === '��')  console.log('This is a beer party! �� without BEER :)')> const drinks = [] if (drinks.every(drink => drink === '��')  console.log('This is a beer party! �� without BEER :)') >      

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *