Массивы

Начнём с создания массивов, научимся с ними работать и приведём ряд примеров.

Создание массивов

Массив – это структура данных, которая позволяет хранить набор элементов одного типа под одним именем. В JavaScript массивы могут содержать элементы разных типов, включая числа, строки, логические значения и даже другие массивы или объекты.

Для создания массива в JavaScript существует несколько способов:

Используя литерал массива:

Доступ к элементам массива

Каждый элемент массива имеет свой индекс, начиная с нуля. Для доступа к конкретному элементу используется синтаксис квадратных скобок [ ].

Также можно изменять значение элемента через доступ по индексу:

Методы работы с массивами

JavaScript предоставляет множество встроенных методов для работы с массивами. Вот некоторые из них:

Далее подробно остановимся на методе

.splice(index, deleteCount, item1, …, itemN). Он изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.

array.splice(index, deleteCount, item1, …, itemN)

index: индекс массива, с которого начнется изменение. Если index отрицательный, то отсчет начинается с конца массива.

deleteCount: количество элементов, которое будет удалено, начиная с позиции index. Если этот параметр равен нулю, то никакие элементы не будут удалены.

item1, …, itemN: элементы, которые будут вставлены вместо удалённых. Эти параметры необязательны. Если они отсутствуют, то метод просто удалит указанные элементы без добавления новых.

.splice(index, deleteCount, item1, …, itemN): изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.

Пример использования .splice()

Рассмотрим следующий код:

Давайте пошагово разберём, что происходит при вызове метода .splice():

Определение начальной позиции (index):
Мы передаем 1 в качестве первого аргумента. Это означает, что изменения начнутся со второго элемента массива (индексация начинается с нуля). Таким образом, начальная позиция будет на элементе «собака».
Удаление элементов (deleteCount):
Передан аргумент 1, который указывает, сколько элементов нужно удалить, начиная с указанной позиции. Следовательно, будет удален один элемент, а именно «собака».
Добавление новых элементов (item1, …, itemN):
После удаления мы передаем два новых элемента: «змея» и «кролик». Эти элементы будут вставлены на место удаленного элемента.
После выполнения всех шагов массив примет вид:
[«кошка»,»змея»,»кролик»,»птица»]

Таким образом, метод .splice() позволяет гибко управлять элементами массива, комбинируя удаление и добавление в одном вызове.

.forEach(callback): выполняет функцию для каждого элемента массива.

Применяется для последовательной обработки каждого элемента массива. Этот метод принимает функцию обратного вызова (callback), которую он вызывает для каждого элемента массива. Функция обратного вызова получает три параметра: текущее значение элемента, его индекс и сам массив.

Синтаксис метода .forEach()  

array.forEach(callback(currentValue, index, array))

currentValue: текущий обрабатываемый элемент массива.

index (опционально): Индекс текущего элемента в массиве.

array (опционально): Сам массив, над которым выполняется итерация.  

Пример использования .forEach()

Рассмотрим следующий код:

Пошаговый разбор того, что происходит при выполнении этого кода:

Пошаговый разбор того, что происходит при выполнении этого кода:

  1. Инициализация массива:
    Создается массив nums, содержащий три элемента: 1, 2 и 3.
  2. Вызов метода .forEach():
    Метод .forEach() вызывается для массива nums. Ему передается анонимная функция, которая будет выполняться для каждого элемента массива.
  3. Обработка первого элемента:
    При первом вызове функции обратного вызова ей передается значение первого элемента массива (num = 1). Внутри функции вычисляется выражение num * 2, результат которого выводится в консоль (console.log(1 * 2)). На экране появляется число 2.
  4. Обработка второго элемента:
    Затем функция обратного вызова вызывается для второго элемента массива (num = 2). Выражение num * 2 снова вычисляется, и результат выводится в консоль (console.log(2 * 2)). На экране появляется число 4.
  5. Обработка третьего элемента:
    Наконец, функция обратного вызова вызывается для последнего элемента массива (num = 3). Опять же, вычисляется выражение num * 2, и результат выводится в консоль (console.log(3 * 2)). На экране появляется число 6.




В результате выполнения всего цикла, на экране последовательно появляются числа 2,4 и 6.

Альтернативный способ записи с использованием стрелочной функции

В современных версиях JavaScript можно использовать стрелочные функции для более компактной записи:

Этот вариант делает код короче и читабельнее, сохраняя ту же функциональность.

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

.filter(callback): создает новый массив, содержащий только те элементы, для которых функция возврата истинного значения.

.reduce(callback, initialValue): сводит массив к одному значению, выполняя функцию для каждого элемента. Предназначен для свертки массива к единственному значению путем применения функции к каждому элементу массива. Эта функция принимает два аргумента: предыдущее значение (аккумулятор) и текущий элемент массива. Начальное значение аккумулятора также может быть задано вторым параметром метода.

Синтаксис метода .reduce()
array.reduce(callback(accumulator, currentValue, index, array), initialValue)

callback: функция, выполняемая для каждого элемента массива. Она принимает четыре аргумента:

accumulator: накопленное значение, возвращаемое предыдущей итерацией функции.
currentValue: Текущий элемент массива.
o index (опционально): Индекс текущего элемента в массиве.

array (опционально): сам массив, над которым выполняется операция.

initialValue (опционально): начальное значение аккумулятора. Если оно не указано, то первым значением аккумулятора станет первый элемент массива, а обработка начнется со второго элемента.

Пример использования .reduce().
Рассмотрим следующий код:

Разберем шаг за шагом, что происходит при выполнении этого кода:

  1. Инициализация массива:
    Создаем массив nums, содержащий три элемента: 1, 2 и 3.
  2. Вызов метода .reduce():
    Вызываем метод .reduce() для массива nums. Передаем ему две вещи: функцию обратного вызова и начальное значение аккумулятора (0).
  3. Первая итерация:
    Так как начальное значение аккумулятора указано (0), оно становится значением аккумулятора для первой итерации.
    Функция обратного вызова вызывается с параметрами: acc = 0 (начальное значение аккумулятора) и num = 1 (первый элемент массива).
    Выполняется выражение внутри функции: return acc + num;, что дает 0 + 1 = 1. Это значение возвращается и становится новым значением аккумулятора.
  4. Вторая итерация:
    Теперь аккумулятор содержит значение 1.
    Функция обратного вызова вызывается с параметрами: acc = 1 и num = 2 (второй элемент массива).
    Выполняется выражение внутри функции: return acc + num;, что дает 1 + 2 = 3. Это значение возвращается и становится новым значением аккумулятора.
  5. Третья итерация:
    Аккумулятор теперь содержит значение 3.
    Функция обратного вызова вызывается с параметрами: acc = 3 и num = 3 (третий элемент массива).
    Выполняется выражение внутри функции: return acc + num;, что дает 3 + 3 = 6. Это значение возвращается и становится окончательным результатом операции.
  6. Результат:
    Значение 6 присваивается переменной sum и выводится в консоль.




Альтернативный способ записи с использованием стрелочной функции

В современных версиях JavaScript можно использовать стрелочную функцию для более краткой записи:

Этот вариант делает код короче и читабельнее, сохраняя ту же функциональность.

Данные методы позволяют эффективно работать с массивами, избегая необходимости писать много повторяющегося кода вручную.

Пример. Поиск самого длинного слова в строке

Эта программа использует массив для хранения слов из строки и находит самое длинное слово.

Пояснение:

  1. Функция findLongestWord:
    Принимает строку sentence в качестве аргумента.
  2. Разделение строки на массив слов:
    Используется метод split(‘ ‘), который разбивает строку на отдельные слова по пробелам и сохраняет их в массиве words.
  3. Поиск самого длинного слова:
    Объявлена переменная longestWord, изначально пустая строка.
    Проходим циклом for…of по всем словам в массиве words.
    Проверяется длина текущего слова. Если она больше длины longestWord, то обновляем значение longestWord на текущее слово.
  4. Возврат результата:
    Возвращается найденное самое длинное слово.
  5. Пример использования:
    Вызываем функцию findLongestWord с предложением «Программирование — это искусство создания программ.».
    Результат выводим в консоль, где должно появиться слово «Программирование».

Пример. Подсчёт количества вхождений каждого слова в тексте

Программа использует объект для подсчёта количества вхождений каждого слова в тексте.

Пояснение:

  1. Функция countWords:
    Принимает строку text в качестве аргумента.
  2. Преобразование текста в массив слов:
    Сначала текст приводится к нижнему регистру методом toLowerCase(), чтобы избежать различий между заглавными и строчными буквами.
    Затем используется регулярное выражение /\s+/ для разделения текста на слова по любому количеству пробелов и сохранения их в массиве words.
  3. Подсчёт слов:
    Объявлен пустой объект wordCounts, который будет использоваться для хранения количества вхождений каждого слова.
    Проходим циклом for…of по всем словам в массиве words.
    Если слово ещё не встречалось, создаем новую запись в объекте wordCounts с ключом равным слову и значением 1.
    Если слово уже встречалось, увеличиваем счётчик на единицу.
  4. Возврат результата:
    Возвращается объект wordCounts, содержащий количество вхождений каждого слова.
  5. Пример использования:
    Вызываем функцию countWords с текстом «Я люблю программирование, потому что программирование — это интересно.».
    Результат выводим в консоль, где должно появиться количество вхождений каждого слова.

Пример. Фильтрация списка товаров по цене

программа демонстрирует работу с массивом объектов, фильтруя товары по заданной максимальной цене.

Пояснение:

  1. Массив продуктов:
    Создан массив products, содержащий объекты с информацией о товарах (название и цена).
  2. Функция filterProductsByPrice:
    Принимает максимальную цену maxPrice в качестве аргумента.
    Использует метод filter для фильтрации массива products. В колбек-функции проверяется условие: цена продукта должна быть меньше или равна maxPrice.
  3. Возврат результата:
    Возвращается новый массив, содержащий только те продукты, которые соответствуют условию фильтрации.
  4. Пример использования:
    Вызываем функцию filterProductsByPrice с максимальной ценой 10000.
    Результат выводим в консоль, где должны появиться товары с ценой менее или равной 10000.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *