Понимание оператора Spread (…) в JavaScript

Понимание оператора Spread (…) в JavaScript

В сегодняшнем эпизоде разговора об удивительных возможностях JavaScript мы обратим наше внимание на оператор Spread(…) или синтаксис Spread. В конце этой статьи вы найдете список ссылок на другие статьи, которые я писал в прошлом о некоторых других концепциях и возможностях JavaScript. А пока давайте сосредоточимся на операторе Spread(…), на том, что он собой представляет и как его использовать для написания лучшего кода JavaScript.

Синтаксис Spread - это функция JavaScript, которая позволяет распаковывать или расширять объекты и итеративные переменные (такие, как массивы и строки), что может быть использовано для создания неглубоких копий структур данных для повышения удобства манипулирования данными. Он часто используется в сочетании с деструктуризацией.

Для чего используется оператор Spread?

Этот оператор можно использовать для простого выполнения многих рутинных задач. Оператор spread может быть использован для выполнения следующих действий:

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

Копирование массива

Использование оператора Spread - это удобный способ копирования массива или объединения массивов, с его помощью можно даже добавлять новые элементы.

const animals = ['🦁','🐘','🐈','🐕‍🦺','🐇']
const moreAnimals = [...animals];
console.log(moreAnimals) // Array(5) ['🦁','🐘','🐈','🐕‍🦺','🐇']

Объединение или конкатенация массивов

Оператор spread можно использовать для быстрого объединения двух массивов.

const myArray = [1,2,3];
const yourArray = [4,5];
const ourArray = [...myArray,...yourArray];

console.log(ourArray); // Array(5) [ 1, 2, 3, 4, 5 ]

Использование математических функций

На мой взгляд, лучший способ понять использование оператора spread - это рассмотреть встроенные функции Math.min() и Math.max(), которые оба ожидают список аргументов, а не массив. Если у вас есть массив чисел и вы хотите получить наименьшее или наибольшее число в этом массиве, вам придется воспользоваться Math.min() или Math.max(), но передача массива в любую из этих функций вернет NaN, а это не тот ответ, на который вы рассчитывали. Вместо этого следует использовать оператор (…), чтобы развернуть массив как список аргументов в функции Math, как показано в примере ниже:

const numbers = [28, -6, 19, 0]
console.log(Math.min(numbers)) // NaN
console.log(Math.min(...numbers)) // -6
console.log(Math.max(...numbers)) // 28

Использование массива в качестве аргументов

Вы можете использовать оператор spread, чтобы превратить массив в список аргументов. Смотрите пример ниже:

function sandwich(a, b, c) {
  console.log(a); // '🍞'
  console.log(b); // '🥬'
  console.log(c); // '🥓'
}

const food = ['🍞', '🥬', '🥓'];

// Old way
sandwich.apply(null, food);

// ✅ ES6 way
sandwich(...food);

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

Оператор spread может добавить элемент в другой массив с естественным, простым для понимания синтаксисом:

const numbers = [1, 2, 3, 4]
const moreNumbers = [...numbers, 5, 6, 7, 8]

console.log(moreNumbers) // Array(8) [1, 2, 3, 4, 5, 6, 7, 8]

Объединение объектов

Посмотрите, как оператор спреда объединяет эти два объекта:

const myVehicle = {
  brand: 'Ford',
  model: 'Mustang',
  color: 'red'
}

const updateMyVehicle = {
  type: 'car',
  year: 2021, 
  color: 'yellow'
}

const myUpdatedVehicle = {...myVehicle, ...updateMyVehicle}

Обратите внимание, что свойства, которые не совпали, были объединены, но свойство, которое совпало, цвет, было перезаписано последним переданным объектом, updateMyVehicle. В результате цвет стал желтым.

Заключение

Появление ES6 сделало JavaScript не только более эффективным, но и более интересным благодаря появлению таких замечательных функций, как оператор spread и другие. Ниже приведен список статей, который я обещал в начале этой статьи.