কম্পিউটার টিউটোরিয়াল

জাভাস্ক্রিপ্টে অবজেক্ট ডিপ কপি (Deep Copy) করা

একটি অবজেক্টের ডিপ কপি মানে সে অবজেক্টের ভিতরে এনকাউন্টার হওয়া প্রতিটি অবজেক্ট ডুপ্লিকেট করা। কপি এবং অরিজিনাল অবজেক্ট কিছুই শেয়ার করবে না, তাই এটি অরিজিনালের একটি ট্রু কপি হবে।

সবচেয়ে সহজ পদ্ধতি: অবজেক্টকে JSON স্ট্রিংএ কনভার্ট করে আবার JS অবজেক্টে পาร์্স করা। তবে এই পদ্ধতিতে মেথড কপি হয় না।

উদাহরণ: JSON.parse/stringify

let obj = { 
  foo: 1, 
  bar: { baz: 'test' } 
};

let newObj = JSON.parse(JSON.stringify(obj));
obj.bar.baz = 20;

console.log(obj);    // { foo: 1, bar: { baz: 20 } }
console.log(newObj); // { foo: 1, bar: { baz: 'test' } }

আউটপুট

{ foo: 1, bar: { baz: 20 } } { foo: 1, bar: { baz: 'test' } }

newObj অরিজিনাল obj-এর আপডেটের সাথে পরিবর্তিত হয়নি, তাই ডিপ কপি সফল হয়েছে।

লিমিটেশন

  • ফাংশন/মেথড কপি হয় না
  • Date, RegExp, Map, Set ইত্যাদি স্পেশাল অবজেক্ট হ্যান্ডেল করে না
  • সার্কুলার রেফারেন্স হলে এরর দেয়
  • undefined, Symbol স্কিপ হয়

বিকল্প পদ্ধতি

  • Lodash: _.cloneDeep(obj) (সব টাইপ হ্যান্ডেল করে)
  • structuredClone(): মডার্ন ব্রাউজার API (সার্কুলার রেফারেন্স সাপোর্ট করে)
  • Custom রিকার্সিভ ফাংশন: 스페সিফিক नीডের জন্য

structuredClone উদাহরণ

const original = { a: 1, b: { c: 2 }, date: new Date() };
const cloned = structuredClone(original);
cloned.b.c = 99;
console.log(original.b.c); // 2 (অপরিবর্তিত)
  1. স্ট্রিংকে জাভাস্ক্রিপ্ট অবজেক্টে রূপান্তর করা

  2. জাভাস্ক্রিপ্টে ইম্পোর্ট করা অবজেক্ট ডিস্ট্রাকচার করা

  3. জাভাস্ক্রিপ্টে মাল্টিডাইমেনশনাল অবজেক্ট তৈরি করা

  4. .NET-এ একটি অবজেক্টের ডিপ কপি কীভাবে করবেন?