Методы массивов: reduce, spread
JavaScript простым языком
Last updated
Was this helpful?
JavaScript простым языком
Last updated
Was this helpful?
Метод reduce
, пожалуй, самый сложный метод при работе с массивом, поэтому придется напрячь свои извилины и внимательно вникнуть в суть происходящего.
Метод работает с элементами слева направо.
Один из главных аргументов метода, как и у многих других – callback-функция. Данный метод необычен тем, что результат callback-функции сохраняется для следующего элемента. Т.е. при вызове callback на следующем элементе, метод позволяет получить доступ к значению вернувшемуся из этого же callback, но на предыдущем элементе. Грубо говоря, метод выполнил callback-функцию на первом элементе массива и переходя ко второму элементу, мы имеем доступ к значению которое вернул callback на первом элементе. Итак, пока ты не запутался и не упал на пол, нужно добавить в объяснения щепотку кода.
Давай с помощью данного метода посчитаем сумму всех элементов массива:
Пожалуй, стоит объяснить, что здесь происходит.
Итак, разберем все аргументы, которые может принимать callback-функция:
Первый аргумент (previousValue
) – значение, которое вернула callback-функция для предыдущего элемента;
Второй аргумент (currentElem
) – текущий элемент;
Третий аргумент – индекс текущего элемента в массиве;
Четвертый аргумент – сам массив, по которому бежит метод reduce.
Мы в своей callback-функции использовали только первые два аргумента, т.к. для нашей задачи этого достаточно.
Наша callback-функция возвращает следующее значение:
Т.е. каждый новый элемент суммируется с предыдущим. По итогу мы и получим сумму всех элементов.
Второй аргумент метода reduce
– начальное значение (initialValue
) для всего метода. В нашем случае мы указали значение 0
. Если бы мы указали, например, значение 100
, то результатом работы метода стало бы значение не 101
, а 201
. Т.е., если тебе нужно к какому-то числу прибавить сумму всего массива, то это самое число нужно указать в качестве начального значения.
У данного метода есть брат акробат, который выполняет все то же самое и работает точно так же, но начинает пробегать по элементам справа налево и называется данный метод – reduceRight
.
Оператор spread
не является методом массива, но достаточно полезен при работе с массивами, поэтому пройти мимо него – преступление.
Оператор выглядит достаточно непривычно относительно других ранее увиденных тобой операторов. Выглядит он так: ...
Да-да, этот оператор представляет собой три точки =)
С его помощью, можно объединять массивы:
Надеюсь ты заметил, что внутри определения нового массива, одним из элементов я указал другой массив с оператором spread
перед ним. Тем самым мы объединяем 2 массива в один. Но можно не 2, а сколько угодно:
Так же с помощью данного оператора можно скопировать массив
. Но запомни, что таким методом можно копировать только массивы с примитивными значениями (числа, строки, булевы значения ), но никак не массивы, элементами которых являются сложные объекты. Пример копирования: