کپی عمیق و کم عمق در جاوا اسکریپت: راهنمای عمیق

هنگام کار با جاوا اسکریپت، ممکن است با موقعیت هایی مواجه شوید که نیاز به کپی از اشیا یا آرایه ها داشته باشید. اینجاست که مفاهیم کپی عمیق و کم عمق وارد عمل می شوند. در این راهنما، ما بررسی خواهیم کرد که کپی عمیق و کم عمق چیست، چرا آنها مهم هستند و چگونه آنها را در کد خود پیاده سازی کنید.
کپی کردن چیست؟
قبل از اینکه به جزئیات کپی عمیق و کم عمق بپردازیم، مهم است که بفهمیم کپی کردن در زمینه جاوا اسکریپت به چه معناست. به زبان ساده، کپی کردن به فرآیند ایجاد یک شی یا آرایه جدید با همان مقادیر موجود اشاره دارد.
دو نوع اصلی کپی در جاوا اسکریپت وجود دارد: کپی کم عمق و کپی عمیق.
کپی کردن سطحی:
کپی کردن سطحی به ایجاد یک شی یا آرایه جدید با همان مقادیر اصلی اشاره دارد، اما شی یا آرایه جدید فقط ارجاعاتی به مقادیر شی یا آرایه اصلی دارد. این بدان معنی است که هر تغییری که در شی یا آرایه اصلی ایجاد شود در شی یا آرایه کپی شده نیز منعکس خواهد شد.
برای مثال کد زیر را در نظر بگیرید:
const originalArray = [1, 2, 3, 4];
const newArray = originalArray;
در این مورد، newArray یک کپی کم عمق از originalArray است. هر تغییری که در originalArray ایجاد شود در newArray نیز منعکس خواهد شد.
چرا از کپی سطحی استفاده کنیم؟
کپی کردن سطحی می تواند در موقعیت هایی که نیاز به ایجاد یک شی یا آرایه جدید به سرعت و کارآمد دارید مفید باشد. از آنجایی که یک کپی کم عمق فقط ارجاعاتی به مقادیر شی یا آرایه اصلی دارد، نسبت به یک کپی عمیق به حافظه کمتری نیاز دارد.
کپی کردن کم عمق هنگام کار با اشیاء یا آرایه های بزرگ نیز مفید است، زیرا ایجاد یک کپی عمیق از یک شی یا آرایه بزرگ می تواند فرآیندی زمان بر باشد.
چگونه کپی کردن سطحی را در جاوا اسکریپت پیاده سازی کنیم؟
راه های مختلفی برای پیاده سازی کپی کم عمق در جاوا اسکریپت وجود دارد. در اینجا چند نمونه آورده شده است:
اپراتور پخش:
عملگر spread یک روش محبوب برای ایجاد کپی های کم عمق از اشیا و آرایه ها است. به عنوان مثال:
const originalObject = {a: 1, b: 2, c: 3};
const newObject = {...originalObject};
const originalArray = [1, 2, 3, 4];
const newArray = [...originalArray];
در هر دو مورد، عملگر spread برای ایجاد یک کپی کم عمق از شی یا آرایه اصلی استفاده می شود.
Object.assign():
روش دیگر برای ایجاد کپی های کم عمق از اشیا استفاده از متد Object.assign() است. به عنوان مثال:
const originalObject = {a: 1, b: 2, c: 3};
const newObject = Object.assign({}, originalObject);
در این مورد، Object.assign() برای ایجاد یک شی جدید که یک کپی کم عمق از شی اصلی است استفاده می شود.
کپی عمیق:
از سوی دیگر، کپی عمیق به ایجاد یک شی یا آرایه جدید با مقادیر مشابه اصلی اشاره دارد، اما شی یا آرایه جدید کپی های جدیدی از مقادیر شی یا آرایه اصلی را در خود نگه می دارد. این بدان معنی است که هر تغییری که در شی یا آرایه اصلی ایجاد شود در شی یا آرایه کپی شده منعکس نخواهد شد.
برای مثال کد زیر را در نظر بگیرید:
const originalArray = [1, 2, 3, 4];
const newArray = JSON.parse(JSON.stringify(originalArray));
در این مورد، newArray یک کپی عمیق از originalArray است. هر تغییری که در originalArray ایجاد شود در newArray منعکس نخواهد شد.
چرا از کپی عمیق استفاده کنیم؟
کپی عمیق در شرایطی که نیاز به ایجاد یک شی یا آرایه جدید با مقادیر مستقل از شی اصلی دارید مفید است.
برای محتوای بیشتر کدنویسی می توانید من را دنبال کنید
Github
لینکدین
DEV