किसी ऑब्जेक्ट को एक की को छोड़कर क्लोन करने का सबसे आसान तरीका है पूरे ऑब्जेक्ट को क्लोन करना और फिर अनावश्यक प्रॉपर्टी को हटाना। हालांकि, क्लोनिंग दो प्रकार की हो सकती है:
- डीप क्लोन
- शैलो क्लोन
शैलो कॉपीज जितना संभव हो उतना कम डुप्लीकेट करती हैं। एक कलेक्शन की शैलो कॉपी कलेक्शन स्ट्रक्चर की कॉपी होती है, एलिमेंट्स की नहीं। शैलो कॉपी के साथ, दो कलेक्शन अब व्यक्तिगत एलिमेंट्स शेयर करते हैं।
शैलो क्लोन उदाहरण
let innerObj = {
a: 'b',
c: 'd'
};
let obj = {
x: "test",
y: innerObj
};
// शैलो कॉपी बनाएं
let copyObj = Object.assign({}, obj);
// दोनों copyObj और obj का prop y अब समान innerObj को रेफर करता है।
// इसमें कोई भी बदलाव दोनों में दिखाई देगा।
innerObj.a = "test";
console.log(obj); // { x: 'test', y: { a: 'test', c: 'd' } }
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));
// अब copyObj और obj का prop y अलग innerObj को रेफर करता है।
innerObj.a = "test";
console.log(obj); // { x: 'test', y: { a: 'test', c: 'd' } }
console.log(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); // { y: { a: 'test', c: 'd' } }
console.log(original); // { x: 'test', y: { a: 'test', c: 'd' } }
मॉडर्न विकल्प (ES6+)
// स्प्रेड ऑपरेटर (शैलो)
const copy = { ...original };
delete copy.keyToRemove;
// Object.fromEntries + filter (शैलो)
const copy = Object.fromEntries(
Object.entries(original).filter(([key]) => key !== 'keyToRemove')
);
// Lodash (डीप)
const _ = require('lodash');
const copy = _.omit(original, 'keyToRemove'); // शैलो
const deepCopy = _.cloneDeep(original);
delete deepCopy.keyToRemove;
संरचित क्लोनिंग (मॉडर्न, डीप)
// स्ट्रक्चर्ड क्लोन API (ब्राउज़र/Node 17+)
const deepCopy = structuredClone(original);
delete deepCopy.keyToRemove;
// सपोर्ट: Date, RegExp, Map, Set, ArrayBuffer, आदि
// सपोर्ट नहीं: फंक्शन्स, DOM नोड्स, सिम्बल्स