JS Core

Перебор массивов

Научиться перебирать массивы с помощью forEach, for...of, findIndex, some, every и includes — понимая, когда использовать каждый.

Начальный (Beginner)

Кратко

forEach — перебирает каждый элемент (без return). for...of — перебирает элементы с возможностью break. some — проверяет, есть ли хотя бы один подходящий. every — проверяет, все ли подходят. includes — проверяет наличие элемента.


Подробно

forEach(callback) — выполняет действие для каждого элемента: const fruits = ['яблоко', 'банан']; fruits.forEach(fruit => console.log(fruit)); // Выведет каждое название. Возвращает undefined!

for...of — перебор с возможностью break: for (const fruit of fruits) { if (fruit === 'банан') break; console.log(fruit); }

some(callback) — возвращает true, если хотя бы один элемент проходит проверку: [1, 2, 3].some(x => x > 2); // true (3 > 2)

every(callback) — возвращает true, если ВСЕ элементы проходят проверку: [1, 2, 3].every(x => x > 0); // true [1, 2, 3].every(x => x > 1); // false (1 не > 1)

includes(value) — проверяет наличие элемента: ['а', 'б', 'в'].includes('б'); // true

findIndex(callback) — возвращает индекс первого подходящего: [10, 20, 30].findIndex(x => x === 20); // 1


Ментальная модель

forEach — как проверить каждый предмет на полке (просто посмотреть). some/every — как задать вопрос: «хотя бы один?» / «все ли?». includes — как спросить: «есть ли это здесь?».


Примеры

**Самый простой:**

javascript
const numbers = [1, 2, 3];
numbers.forEach(n => console.log(n)); // 1, 2, 3

forEach перебирает каждый элемент и выполняет функцию. Не возвращает ничего.

**Простой:**

javascript
const ages = [15, 22, 17, 30];

const hasAdult = ages.some(age => age >= 18);
const allAdult = ages.every(age => age >= 18);

console.log(hasAdult); // true (22 и 30)
console.log(allAdult); // false (15 и 17)

some — «хотя бы один?». every — «все ли?».

**Реальный пример:**

javascript
const users = [
  { name: 'Анна', active: true },
  { name: 'Пётр', active: false },
  { name: 'Мария', active: true }
];

const activeCount = users.filter(u => u.active).length;
const hasInactive = users.some(u => !u.active);

console.log(activeCount); // 2
console.log(hasInactive);  // true

Цепочки методов позволяют выразить сложную логику в одной строке.


Частые ошибки

**Неправильно:** Использовать break/continue в forEach

**Почему:** forEach — это не цикл. break/continue не работают.

**Правильно:** Для break/continue используйте for...of.

**Неправильно:** Думать, что forEach возвращает массив

**Почему:** forEach всегда возвращает undefined.

**Правильно:** Для создания нового массива используйте map.

**Неправильно:** Забывать, что some/every возвращают boolean

**Почему:** some/every — это проверки, они не модифицируют массив.

**Правильно:** some/every → true/false. Для фильтрации — filter.


Важно запомнить

  • forEach — перебор без return
  • for...of — перебор с break/continue
  • some — хотя бы один true → true
  • every — все true → true
  • includes — проверка наличия элемента

Связь

Назад: Вы знаете map/filter/find (J14) — теперь вы знаете полный набор методов перебора.

Вперёд: Следующий урок (J16) — функции высшего порядка: передача функций как аргументов.

Материалы курса JS Core — PROlab Academy.