6 способів використання оператора розпаковки в JS

2 хв. читання

Написання коду на JavaScript стало більш приємним і динамічним завдяки ES6 та Babel. Тепер нас не дивують ні концептуально нові мови, ні новий спосіб парсингу, як от JSX.

Я великий фанат такої нової фічі як spread-оператор (ми будемо його називати оператором розпакування). Ці три крапки можуть досить кардинально змінити ваш код. В цій статті ми розглянемо декілька корисних кейсів його використання.

Виклик функцій без apply

Раніше для виклику функції, що приймає декілька аргументів потрібно було використовувати Function.prototype.apply, якщо ці аргументи були в вигляді масиву.

function doStuff (x, y, z) { }
var args = [0, 1, 2];

doStuff.apply(null, args);

З новим оператором можна не використовувати метод apply, достатньо лише додати ... перед масивом. Так код стає коротше, чистіше і без null.

doStuff(...args);

Поєднання масивів

Звісно, це можна зробити декількома способами. І оператор розпаковки один з них:

arr1.push(...arr2) // додати елементи в кінець масиву
arr1.unshift(...arr2) // на початок

Якщо ви хочете з'єднати декілька масивів і передати кудись результат, то можна робити так:

var arr1 = ['two', 'three'];
var arr2 = ['one', ...arr1, 'four', 'five'];

// ["one", "two", "three", "four", "five"]

І синтаксис коротший, і можна контролювати позицію вставки.

Копіювання масивів

Копіювання масивів – досить часта задача, раніше для цього використовували Array.prototype.slice, але зараз і це можна робити за допомогою нового оператора.

var arr = [1,2,3];
var arr2 = [...arr]; 
arr2.push(4)

Але пам'ятайте, що об'єкти в масиві зберігаються за посиланням, тому це не справжня копія.

Конвертація arguments та NodeList в масив

Як і в випадку з копіюванням масивів, раніше для цього використовували Array.Prototype.slice, тепер це можна зробити коротше і красивіше.

[...document.querySelectorAll('div')]

Також ви можете отримати аргументи функції в вигляді масиву, для цього потрібно лише трохи змінити сигнатуру:

var myFn = function(...args) {
// ...
}

Слід нагадати, що це також можна зробити методом Array.from.

Використання в математичних функціях

Звісно, оператор розпаковує аргументи в будь-яку функцію, але математичні функції – дуже гарний приклад його використання, так як багато з них приймають необмежену кількість аргументів:

let numbers = [9, 4, 7, 1];
Math.min(...numbers); // 1

Веселощі з деструктуризацією

Деструктуризація – це весело, я використовую її дуже часто в своїх React- та Node.js-проектах. Ви можете скористактися деструктуризацією та новим оператором разом для розміщення даних в змінних к вам потрібно:

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
console.log(x); // 1
console.log(y); // 2
console.log(z); // { a: 3, b: 4 }
Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.8K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація