javascriptArray spread and concatکپی و ترکیب آرایه در جاوااسکریپت
کپی و ترکیب آرایه در جاوااسکریپت با spread و concat؛ ساخت فهرست تازه، حفظ منبع و مشترکماندن شیءهای تو در تو را با مثال عملی بررسی کنید.
مفهوم به زبان ساده
اگر دو فهرست درس را برای نمایش کنار هم میگذارید، همیشه لازم نیست یکی را با تغییر مستقیم دیگری گسترش دهید. گسترش یا spread با سه نقطه، عضوهای یک دادهٔ پیمایشپذیر را در محل مناسب باز میکند. در یک آرایهٔ تازه میتوانیم عنوان ثابت، عضوهای فهرست اول و عضوهای فهرست دوم را کنار هم بنویسیم. concat هم برای ساخت آرایهٔ ترکیبی ابزار دیگری است.
انتساب ساده مانند copy = source آرایهٔ تازه نمیسازد؛ دو نام به همان آرایه اشاره میکنند. در مقابل، [...source] ظرف بیرونی تازهای میسازد. در مثال، اضافهکردن عنوان به نسخهٔ تازه، طول فهرست اصلی را عوض نمیکند.
این کپی سطحی است. اگر عضوها شیء باشند، مرجع همان شیءها در ظرف تازه قرار میگیرد. نمونهٔ آخر نشان میدهد تغییر ویژگی از مسیر کپی، در ردیف منبع هم دیده میشود. برای استقلال ردیف هدف باید همان سطح داده را نیز آگاهانه جایگزین کنید؛ کپی کامل همهٔ برنامه همیشه لازم نیست. برای تمرین، یک عضو ساده و سپس یک ردیف تو در تو را تغییر دهید و تفاوت اثر را توضیح دهید. spread آرایه را با پارامتر rest در تعریف تابع یکی ندانید.
کجا به کار میآید؟
- ساخت فهرست ترکیبی برای نمایش بدون افزودن مستقیم به منبع
- آمادهکردن نسخهٔ بیرونی تازه پیش از مرتبسازی یا ویرایش
از تعریف تا یک مثال واقعی
const first = ['مبانی', 'تمرین'];
const copy = [...first];
copy.push('پروژه');
console.log(first.length);
console.log(copy.join(', '));
console.log(first.concat(['مرور']).join(', '));
const rows = [{ amount: 2 }];
const shallow = [...rows];
shallow[0].amount = 3;
console.log(rows[0].amount);
console.log(shallow[0] === rows[0]);
2 مبانی, تمرین, پروژه مبانی, تمرین, مرور 3 true
این مثال چطور کار میکند؟
spread یک آرایهٔ بیرونی تازه از عنوانها میسازد.
push روی کپی، طول فهرست اصلی را عوض نمیکند.
concat نتیجهٔ ترکیبی تازه میدهد.
شیء داخل shallow و rows مشترک است؛ تغییر amount از هر دو مسیر دیده میشود.
اشتباه رایج
ظرف تازه به معنی دادهٔ تو در توی مستقل نیست. همچنین افزودن یک آرایه بدون spread میتواند آن را بهصورت یک عضو تو در تو وارد نتیجه کند.
این را به خاطر بسپارید
spread و concat فهرست تازه میسازند، اما استقلال سطحهای داخلی باید جداگانه طراحی شود.