عملگر Spread

عملگر Spread به شما اجازه باز کردن یک شیء قابل شمارش ماننده آرایه، Map و یا Set را به شما می دهد. این عملگر بر خلاف Rest parameters عمل می کند. اگر آرایه را به صورت یک جعبه فرض کنیم، Rest parameters به شما اجازه قرار دادن داده ها در این جعبه و Spread به شما اجازه باز کردن جعبه و خارج کردن محتویات آن را می دهد. برای استفاده از این عملگر هم از علامت سه نقطه (…) استفاده می شود. اما نحوه تشخیص Rest parameters و عملگر Spread چگونه است؟ Rest parameters همانطور که در درس قبل ذکر شد، داده ها را در یک آرایه می ریزد و در آخر پارامترهای یک تابع قرار می گیرد ولی عملگر Spread در هر جای برنامه می تواند مورد استفاده قرار گیرد. به مثال زیر در مورد Rest parameters توجه کنید :

function restDemo(num1, num2, ...anotherNumbers) 
{
    console.log(anotherNumbers);
}
  
restDemo(1,2,3,4,5);
[3, 4, 5]

همانطور که مشاهده می کنید anotherNumbers یک Rest parameter است. در کد بالا، اعداد 1 و 2 به ترتیب در پارامترهای num1 و num2 ذخیره می شوند و اعداد 3 و 4 و 5 هم به وسیله anotherNumbers در یک آرایه قرار می گیرند. حال به عملگر Spread می بپردازیم. فرض کنید ما یک آرایه داریم و می خواهیم محتویات آن را به یک آرایه دیگر اضافه کنیم. به مثال زیر توجه کنید:

let array1 = [10, 7, 13];
let array2 = [array1, 5, 4, 9];

console.log(array2);
[Array(3), 5, 4, 9]

در کد بالا، ما یکی آرایه به نام array1 تعریف کرده ایم و در خط بعد آن را در داخل یک آرایه دیگر قرار داده ایم، به امید آنکه محتویات آن در داخل آرایه دوم یعنی array2 ریخته شود. ولی با چاپ array2 اتفاقی که می افتد این است که این آرایه دارای 4 عضو می شود که عضو اول آن خود یک آرایه، که همان array1 است، می باشد. ما می خواهیم با چاپ array2 خروجی به صورت [10, 7, 13, 5, 4, 9] نمایش داده شود. یعنی اعضای array1 را استخراج و در داخل array2 بریزیم و نمایش دهیم. برای این منظور کافیست که کد بالا را به صورت زیر تغییر دهیم:

let array1 = [10, 7, 13];
let array2 = [...array1, 5, 4, 9];

console.log(array2);
[10, 7, 13, 5, 4, 9]

همانطور که مشاهده می کنید ما قبل از نام آرایه ای که می خواهیم محتویاتش را استخراج کنیم از علامت … استفاده کرده ایم. خط 2 کد بالا را به صورت زیر هم می توانیم بنویسیم:

let array2 = [5, ...array1, 4, 9];

یعنی این عملگر در هر جا که قرار بگیرد، مهم نیست. می توان دو آرایه بالا را به صورت زیر هم با هم ادغام کرد:

let array1 = [10, 7, 13];
let array2 = [5, 4, 9];

let array3 = [...array1, ...array2];

console.log(array3);
[10, 7, 13, 5, 4, 9]

با استفاده از عملگر Spread، می توان محتویات یک آرایه را در آرایه دیگر کپی کرد:

let array1 = [10, 7, 13];
let array2 = [...array1];

console.log(array2);
[10, 7, 13]