javascriptArray.slice() and Array.splice()تفاوت slice و splice در جاوااسکریپت
slice و splice در آرایهٔ جاوااسکریپت هدف متفاوت دارند؛ پیشنمایش بخشی از فهرست و جایگزینی اعضا را با مرز پایان، تعداد حذف و خروجی واقعی ببینید.
مفهوم به زبان ساده
برای پیشنمایش چند درس از یک فهرست، معمولاً نمیخواهیم خود فهرست کوتاه شود. slice بازهای از آرایه را در آرایهای تازه قرار میدهد و منبع را تغییر نمیدهد. پارامتر دوم آن اندیس پایانِ غیرشامل است. در مقابل، splice برای تغییر همان آرایه است: از یک جای مشخص، تعدادی عضو را حذف میکند و میتواند عضوهای تازه را همانجا قرار دهد.
در مثال، ابتدا دو درس میانی را با slice میگیریم. بعد با splice همان دو عضو را از فهرست اصلی برداشته و یک عنوان جایگزین میکنیم. نتیجهٔ splice آرایهٔ اعضای حذفشده است، نه فهرست نهایی.
نامهای شبیه این دو روش نباید شما را از تفاوت قراردادشان غافل کند. در splice عدد دوم تعداد حذف است؛ آن را با اندیس پایان slice اشتباه نگیرید. slice کپی سطحی میسازد، پس شیءهای تو در تو میتوانند همچنان مشترک باشند. برای تمرین، تعداد حذف را صفر کنید تا فقط درج انجام شود و سپس خروجی حذف را بررسی کنید. اگر تغییرناپذیری لازم است، روش تازهٔ toSpliced یا ساخت نسخهٔ کپی را با پشتیبانی محیط خود بررسی کنید.
کجا به کار میآید؟
- گرفتن چند ردیف برای پیشنمایش بدون حذف منبع
- جایگزینکردن بخش مشخصی از فهرست در ویرایش قطعی
از تعریف تا یک مثال واقعی
const lessons = ['الف', 'ب', 'پ', 'ت'];
const preview = lessons.slice(1, 3);
const removed = lessons.splice(1, 2, 'میانی');
console.log(preview.join(', '));
console.log(removed.join(', '));
console.log(lessons.join(', '));
ب, پ ب, پ الف, میانی, ت
این مثال چطور کار میکند؟
slice اندیس یک و دو را میگیرد و پیش از اندیس سه متوقف میشود.
splice از اندیس یک، دو عضو حذف و میانی را درج میکند.
removed شامل دو عنوان برداشتهشده است.
چاپ lessons تغییر واقعی منبع را نشان میدهد.
اشتباه رایج
پارامتر دوم splice تعداد حذف است، ولی پارامتر دوم slice اندیس پایان است. نتیجهٔ splice را هم با آرایهٔ ویرایششده اشتباه نگیرید.
این را به خاطر بسپارید
برای خواندن یک بازه slice و برای تغییر منبع splice را انتخاب کنید؛ خروجی هر دو آرایه است اما معنای متفاوتی دارد.