একটি কী বাদ দিয়ে অবজেক্ট ক্লোন করার সবচেয়ে সহজ উপায় হলো পুরো অবজেক্ট ক্লোন করে তারপর অপ্রয়োজনীয় প্রপার্টি মুছে ফেলা। ক্লোনিং দুটি প্রকারের হতে পারে:
- ডিপ ক্লোন
- শ্যালো ক্লোন
শ্যালো কপি যতটুকু কম হয় ততটুকু ডুপ্লিকেট করে। একটি কালেকশনের শ্যালো কপি হলো কালেকশন স্ট্রাকচারের কপি, এলিমেন্টগুলোর নয়। শ্যালো কপিতে দুটি কালেকশন একই ইন্ডিভিজুয়াল এলিমেন্ট শেয়ার করে।
উদাহরণ (শ্যালো কপি)
let innerObj = { a: 'b', c: 'd' };
let obj = { x: "test", y: innerObj };
// শ্যালো কপি তৈরি
let copyObj = Object.assign({}, obj);
// copyObj এবং obj-এর y প্রপার্টি একই innerObj রেফার করে
innerObj.a = "test";
console.log(obj);
console.log(copyObj);
// আউটপুট: দুটোই { x: 'test', y: { a: 'test', c: 'd' } } দেখাবে
দ্রষ্টব্য: শ্যালো কপি রিকার্সিভলি ক্লোন করে না, শুধু টপ লেভেলে করে।
ডিপ কপি সব কিছু ডুপ্লিকেট করে। একটি কালেকশনের ডিপ কপি হলো দুটি কালেকশন যেখানে অরিজিনাল কালেকশনের সব এলিমেন্ট ক্লোন করা হয়েছে।
উদাহরণ (ডিপ কপি)
let innerObj = { a: 'b', c: 'd' };
let obj = { x: "test", y: innerObj };
// ডিপ কপি তৈরি
let copyObj = JSON.parse(JSON.stringify(obj));
// এখন innerObj পরিবর্তন করলে copyObj প্রভাবিত হবেনা
innerObj.a = "test";
console.log(obj);
console.log(copyObj);
// আউটপুট: obj { x: 'test', y: { a: 'test', c: 'd' } }, copyObj { x: 'test', y: { a: 'b', c: 'd' } }
কপি পাওয়ার পর delete কীওয়ার্ড দিয়ে অপ্রয়োজনীয় প্রপার্টি মুছে ফেলুন।
উদাহরণ
let original = { x: 'test', y: { a: 'test', c: 'd' } };
let copy = JSON.parse(JSON.stringify(original));
delete copy['x'];
console.log(copy);
console.log(original);
// আউটপুট: copy { y: { a: 'test', c: 'd' } }, original { x: 'test', y: { a: 'test', c: 'd' } }