Изменение элементов массива в forEach: прямая запись в JS

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

JS
Скопировать код
// Для изменения значений элементов массива с помощью forEach используйте их индексы:
let numbers = [1, 2, 3];
numbers.forEach((num, idx) => numbers[idx] *= 2);
// И вот, массив numbers теперь выглядит так: [2, 4, 6]
Кинга Идем в IT: пошаговый план для смены профессии

Применение forEach для модификации массивов

Метод forEach() в JavaScript отлично подходит для проведения различных операций, включая вызовы с побочными эффектами или изменение исходного массива. Давайте подробно рассмотрим, как использовать forEach() в различных ситуациях.

Изменение примитивных значений напрямую

forEach() позволяет изменять элементы массива на месте, обращаясь к ним по индексу. Это делает его незаменимым помощником при работе с примитивными значениями:

JS
Скопировать код
let numbers = [1, 2, 3];
numbers.forEach((value, index, array) => {
  array[index] = value * 2; // Удваиваем каждое число
});
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Изменение объектов внутри массива

Если массив состоит из объектов, их свойства можно изменять напрямую, так как объекты хранятся по ссылке. В этом случае обращаться к массиву по индексу не требуется:

JS
Скопировать код
let users = [{ name: 'Алёна' }, { name: 'Виктор' }];
users.forEach(user => user.name += " Иванов");
// И сейчас users будет выглядеть так: [{ name: 'Алёна Иванов' }, { name: 'Виктор Иванов' }]

Указание контекста 'this' в forEach

Если необходим контекст (this) для функции обратного вызова в forEach, его можно передать вторым аргументом. Стоит отметить, что стрелочные функции не учитывают this и берут его из внешнего контекста.

JS
Скопировать код
function logUpperCase() {
  console.log(this.toUpperCase()); // 'this' указывает на переданный объект
}

["a", "b", "c"].forEach(logUpperCase, String.prototype);

Визуализация

Представьте forEach в виде тепловоза 🚂, где каждый вагон – это элемент массива. Проезжая по пути, мы окрашиваем вагоны в новые цвета.

Markdown
Скопировать код
Array.forEach((item, index, arr) => {
  arr[index] = `🎨${item}🎨`; // Каждый элемент окрашивается в яркие цвета
});

Перед началом тепловоз выглядел так:

Markdown
Скопировать код
🚂[📦, 📦, 📦, 📦]

А теперь посмотрите, как он изменился:

Markdown
Скопировать код
🚂[🎨📦🎨, 🎨📦🎨, 🎨📦🎨, 🎨📦🎨]

Сохранение оригинального массива

В JavaScript модификация массива может привести к непредвиденным результатам. Для сохранения исходного массива используйте методы, которые возвращают новые массивы.

Волшебные способности Map

map() создаёт новый массив, применяя функцию к каждому элементу, не изменяя исходный массив:

JS
Скопировать код
let doubled = numbers.map(num => num * 2);

Фильтрация нежелательных элементов

Для выделения элементов по определённому критерию используйте filter(). Он возвращают новый массив с нужными элементами:

JS
Скопировать код
let evens = numbers.filter(num => num % 2 === 0);

Методы, не модифицирующие массив

some, every и find помогут вам решить задачи, требующие сохранения исходного массива в исходном состоянии.

Избегаем ловушек

Работа с forEach может быть сложной, поэтому важно избегать некоторых ошибок:

Пропуск пустых значений

forEach() пропускает пустые места в массиве, будто они его не касаются:

JS
Скопировать код
let arrWithHoles = [1, , 3];
arrWithHoles.forEach((num) => console.log(num)); // Выведет только 1 и 3

Изменение длины массива

Попытки изменить длину массива во время работы forEach могут привести к неожиданным проблемам.

Завлекающие в заблуждение индексы

Изменение элементов по своим индексам при итерации не влияет на текущий индекс. Такие изменения могут оказаться хитрыми и неочевидными.

Полезные материалы

  1. Array.prototype.forEach() – JavaScript | MDNофициальное руководство по методу .forEach().
  2. javascript – Циклический обход массива и удаление элементов, не нарушая цикл for – Stack Overflow — обсуждение с примерами изменения массивов.
  3. Метод forEach() массива в JavaScript — понятное объяснение метода .forEach() для начинающих.
  4. Medium — обсуждение различий между .forEach(), .map(), .filter() и .reduce().
  5. Методы массивов — детальный разбор методов работы с массивами в JavaScript.
  6. 8 обязательных к знанию методов массивов в JavaScript – YouTube — наглядное руководство по основным методам работы с массивами.
  7. Как использовать методы массивов в JavaScript — подробное описание методов итерации при работе с массивами.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как изменить элементы массива с помощью метода forEach?
1 / 5