8 способов применения spread-оператора
учимся использовать spread-оператор в JavaScript
Spread-оператор {...}
был представлен в ES6
. Он расширяет итерируемый объект в отдельный элемент. К итерируемым объектам относятся все сущности, которые можно перебрать с помощью цикла for
. Примеры итерируемых сущностей: array, string, map, set, DOM node.
1. Для вывода лога
Spread-оператор можно использовать в console.log
с итерируемым объектом:
let fruits = ['🍈', '🍉', '🍋', '🍌'];
console.log(...fruits); //🍈 🍉 🍋 🍌
2. Для копирования массивов
let fruits = ['🍈', '🍉', '🍋', '🍌'];
let fruitsCopy = [ ...fruits ];
console.log(...fruitsCopy); //🍈 🍉 🍋 🍌
или копирования объектов:
let user = {name : "John", age : 20 }
let userCopy = {...user}
Spread-оператор не осуществляет глубокое копирование.
3. Для объединения
let fruits = ['🍈', '🍉', '🍋', '🍌'];
let vegetables = ['🍅', '🍆', '🥒'];
let fruitsAndVeg = [...fruits, ...vegetables]
в том числе для объединения объектов:
let user1 = {name : "John", age : 20 };
let user2 = {name : "Ram", salary: '20K' };
let userCopy = {...user1, ...user2};
userCopy ; // {name : "Ram", age :20 , salary : '20K'};
При объединении объектов, если ключ уже существует, он будет заменен значением последнего объекта с таким же ключом.
4. Чтобы передавать аргументы
function sum(a, b) {
return a+b;
}
let num = [1,2];
sum(...num); // 3
Spread-оператор можно использовать с математическими функциями:
let num = [5,9,3,5,7];
Math.min(...num);
Math.max(...num);
5. При деструктуризации переменных
let [melon, ...fruits ] = ['🍉', '🍋', '🍌', '🍊'];
melon; //🍉
fruits; // [ '🍋', '🍌', '🍊']
или деструктуризации объектов:
let user = {name : "Ram", age: 20, salary: '20K', job : "Tester" };
let { name, age, ...details } = user;
name; // Ram
age; // 20
details; // {salary: '20K', job : 'Tester'};
6. Для преобразования объектов NodeList в массивы
Объекты NodeList подобны массивам, но не имеют все методы массивов, такие как: forEach
, map
, filter
и другие.
let nodeList = document.querySelectorAll('.class')
let nodeArray = [...nodeList]
7. Для преобразования строки в символы
Строка является итерируемой сущностью, поэтому ...
можно применить и к строке, чтобы получить массив символов:
let name = "Ram";
let chars = [...name];
console.log(chars); // ["R", "a", "m"]
8. Чтобы удалить дубли в массиве
let num = [1, 3, 1, 3, 3, 1];
let uniqueNum = [...new Set(num)];
uniqueNum; //[ 1, 3 ]
Спасибо за внимание.
Перевод статьи “8 ways to use the Spread operator in JavaScript”.