Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Метод массива 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() когда нужно проверить, что все элементы соответствуют условию. Это быстро и читаемо.