← Назад к вопросам

Что такое делегирование?

1.0 Junior🔥 191 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Метод массива every()

every() - это встроенный метод массива, который проверяет, все ли элементы массива соответствуют условию. Возвращает boolean (true или false).

Синтаксис

array.every((element, index, array) => {
  // условие
  return условие;
});

// Возвращает true если все элементы соответствуют условию
// Возвращает false если хотя бы один не соответствует

Простые примеры

// Проверка: все ли числа положительные?
const numbers = [1, 2, 3, 4, 5];
const allPositive = numbers.every(num => num > 0);
console.log(allPositive); // true

// Проверка: все ли числа больше 10?
const allLargeThan10 = numbers.every(num => num > 10);
console.log(allLargeThan10); // false

// Проверка: все ли имеют определённый тип?
const ages = [20, 25, 30];
const allNumbers = ages.every(age => typeof age === 'number');
console.log(allNumbers); // true

Параметры callback

Функция обратного вызова получает три параметра:

array.every((element, index, array) => {
  // element - текущий элемент
  // index - индекс текущего элемента
  // array - сам массив
});

const words = ['hello', 'world', 'test'];
words.every((word, index, arr) => {
  console.log(`${index}: ${word} (всего ${arr.length})`);
  return true;
});
// 0: hello (всего 3)
// 1: world (всего 3)
// 2: test (всего 3)

Важная особенность: short-circuit

every() останавливает итерацию, когда находит первый false. Это экономит производительность:

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const result = numbers.every(num => {
  console.log('Проверяю:', num);
  return num < 5; // false на элементе 5
});

console.log('Результат:', result); // false

// Вывод:
// Проверяю: 1
// Проверяю: 2
// Проверяю: 3
// Проверяю: 4
// Проверяю: 5
// Результат: false
// (Остальные элементы не проверяются!)

Примеры использования в реальном коде

1. Валидация формы

const userForm = {
  name: 'John',
  email: 'john@example.com',
  age: 25
};

const isFormValid = Object.values(userForm).every(value => {
  return value !== null && value !== undefined && value !== '';
});

console.log(isFormValid); // true

2. Проверка массива объектов

const users = [
  { id: 1, active: true },
  { id: 2, active: true },
  { id: 3, active: true }
];

const allActive = users.every(user => user.active === true);
console.log(allActive); // true

3. Проверка типов в массиве

const mixedArray = [1, 'hello', 3, 4];
const allNumbers = mixedArray.every(item => typeof item === 'number');
console.log(allNumbers); // false

const numbers = [1, 2, 3, 4];
const allNumbers = numbers.every(item => typeof item === 'number');
console.log(allNumbers); // true

4. Проверка прав доступа

const permissions = ['read', 'write', 'delete'];
const requiredPermissions = ['read', 'write'];

const hasAllPermissions = requiredPermissions.every(perm => 
  permissions.includes(perm)
);

console.log(hasAllPermissions); // true

every() vs некоторые альтернативы

Сравнение с some():

const arr = [1, 2, 3, 4, 5];

// every - все ли > 0? true
arr.every(x => x > 0); // true

// some - есть ли > 3? true
arr.some(x => x > 3); // true

// Противоположность:
!arr.every(x => x > 0); // false
arr.some(x => !(x > 0)); // false

Сравнение с filter():

const arr = [2, 4, 6, 8];

// every - все ли чётные?
arr.every(x => x % 2 === 0); // true

// filter - найди все чётные
arr.filter(x => x % 2 === 0); // [2, 4, 6, 8]

Практические примеры в React

Проверка всех чекбоксов:

function PermissionsForm({ permissions, onSubmit }) {
  const [selected, setSelected] = useState([]);
  
  const allSelected = permissions.every(perm => 
    selected.includes(perm.id)
  );
  
  return (
    <div>
      {permissions.map(perm => (
        <input
          key={perm.id}
          type="checkbox"
          checked={selected.includes(perm.id)}
          onChange={(e) => {
            if (e.target.checked) {
              setSelected([...selected, perm.id]);
            } else {
              setSelected(selected.filter(id => id !== perm.id));
            }
          }}
        />
      ))}
      <button disabled={!allSelected}>Submit</button>
    </div>
  );
}

Валидация объекта перед отправкой:

function validateUser(user) {
  const requiredFields = ['name', 'email', 'phone'];
  return requiredFields.every(field => 
    user[field] && user[field].toString().trim() !== ''
  );
}

const user = { name: 'John', email: 'john@test.com', phone: '123' };
console.log(validateUser(user)); // true

Граничные случаи

Пустой массив возвращает true:

const empty = [];
console.log(empty.every(x => x > 0)); // true!
// Это логично: все элементы пустого массива (их нет) соответствуют условию

С контекстом (this):

const obj = { threshold: 5 };
const arr = [1, 2, 3];

const result = arr.every(function(num) {
  return num > this.threshold; // this указывает на obj
}, obj); // второй параметр - контекст

console.log(result); // false

Performance

Так как every() использует short-circuit, он оптимален для проверок:

// Хорошо - остановится на первом false
const isValid = users.every(user => user.email && user.email.includes('@'));

// Плохо - проверит все элементы
const validEmails = users.filter(user => user.email && user.email.includes('@'));
const isValid = validEmails.length === users.length;

Итог

every() возвращает true только если ВСЕ элементы соответствуют условию:

[1, 2, 3].every(x => x > 0) // true - все больше 0
[1, 2, 3].every(x => x > 2) // false - не все больше 2
[].every(x => x > 0)        // true - нечего проверять

Используй every() когда нужно проверить, что все элементы соответствуют условию. Это быстро и читаемо.