Поиск в массиве
Искать в массиве приходится постоянно: есть ли товар в корзине, где в списке нужный пользователь, все ли поля формы заполнены. Для каждого такого вопроса есть свой метод, и все они избавляют от ручного цикла с проверками.
includes — есть или нет
includes() отвечает на самый простой вопрос: есть ли значение в массиве. Результат — true или false:
const colors = ['красный', 'зелёный', 'синий'];
console.log(colors.includes('синий')); // trueСравнение строгое, как у ===: строка '5' и число 5 считаются разными значениями.
indexOf — на каком месте
indexOf() возвращает индекс первого найденного значения или -1, если значения нет:
const colors = ['красный', 'зелёный', 'синий'];
console.log(colors.indexOf('зелёный')); // 1
console.log(colors.indexOf('чёрный')); // -1lastIndexOf() ищет так же, но с конца массива.
find — первый подходящий элемент
Когда значение нужно найти по условию, используют find(). Он возвращает первый элемент, для которого функция вернула true, или undefined:
const numbers = [3, 8, 15, 4];
console.log(numbers.find((n) => n > 5)); // 8Чаще всего так ищут объект в списке по одному из свойств:
const users = [
{ id: 1, name: 'Анна' },
{ id: 2, name: 'Олег' },
];
const user = users.find((u) => u.id === 2);
console.log(user.name); // ОлегfindIndex — индекс по условию
findIndex() работает как find(), но возвращает индекс найденного элемента или -1. Индекс нужен, например, чтобы потом заменить или удалить элемент:
const numbers = [3, 8, 15, 4];
console.log(numbers.findIndex((n) => n > 10)); // 2Методы findLast() и findLastIndex() ищут так же, но начиная с конца.
some и every — проверка всего массива
some() отвечает, подходит ли хотя бы один элемент, а every() — подходят ли все:
const ages = [17, 22, 35];
console.log(ages.some((age) => age < 18)); // true
console.log(ages.every((age) => age < 18)); // false| Метод | Возвращает |
|---|---|
includes() | true или false |
indexOf() | индекс или -1 |
find() | элемент или undefined |
findIndex() | индекс или -1 |
some() / every() | true или false |
Частая ошибка
Результат indexOf() нельзя использовать в условии напрямую. Элемент с индексом 0 даёт ложное значение, а отсутствующий (-1) — истинное:
const colors = ['красный', 'зелёный'];
if (colors.indexOf('красный')) {
console.log('Нашли');
} else {
console.log('Не нашли'); // Не нашли
}Для вопроса «есть или нет» используйте includes(), а результат indexOf() сравнивайте с -1.