Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> JavaScript

JavaScript में ऑब्जेक्ट क्लोन करना


JavaScript ऑब्जेक्ट क्लोनिंग

क्लोनिंग = ऑब्जेक्ट की प्रॉपर्टीज को नए ऑब्जेक्ट में कॉपी करना ताकि दोनों स्वतंत्र हों। शैलो कॉपी (केवल पहली लेवल) vs डीप कॉपी (नेस्टेड ऑब्जेक्ट्स भी)।

तरीका 1: लूप से मैन्युअल कॉपी (शैलो)

<html> <body> <p id="demo"></p> <script>
  const source = {name: "सलमान", age: 23, salary: 25000};
  let target = {};
  
  for (let key in source) {
    if (source.hasOwnProperty(key)) {
      target[key] = source[key];
    }
  }
  
  document.getElementById("demo").innerHTML = 
    "targetObject name = " + target.name + ", age = " + target.age + ", salary = " + target.salary;
</script> </body> </html>

आउटपुट

targetObject name = सलमान, age = 23, salary = 25000

तरीका 2: JSON.parse/stringify (डीप कॉपी)

<html> <body> <p id="demo"></p> <script>
  const source = {name: "सलमान", age: 23, salary: 25000};
  let target = JSON.parse(JSON.stringify(source));
  
  document.getElementById("demo").innerHTML = 
    "targetObject name = " + target.name + ", age = " + target.age + ", salary = " + target.salary;
</script> </body> </html>

आउटपुट

targetObject name = सलमान, age = 23, salary = 25000

तरीका 3: Object.assign() (शैलो)

<html> <body> <p id="demo"></p> <script>
  const source = {name: "सलमान", age: 23, salary: 25000};
  let target = Object.assign({}, source);
  
  document.getElementById("demo").innerHTML = 
    "targetObject name = " + target.name + ", age = " + target.age + ", salary = " + target.salary;
</script> </body> </html>

आउटपुट

targetObject name = सलमान, age = 23, salary = 25000

तरीका 4: स्प्रेड ऑपरेटर (ES2018, शैलो)

<script>
  const source = {name: "सलमान", age: 23, salary: 25000};
  const target = {...source};
  // {name: "सलमान", age: 23, salary: 25000}
</script>

शैलो vs डीप कॉपी तुलना

तरीकाटाइपनेस्टेड ऑब्जेक्ट्सफंक्शन्सDate/RegExpसर्कुलर रेफ
लूप / Object.assign / स्प्रेडशैलोरेफरेंस कॉपीकॉपी होता हैकॉपी होता है❌ स्टैक ओवरफ्लो
JSON parse/stringifyडीप✅ डीप कॉपी❌ खो जाता है❌ स्ट्रिंग बन जाता है❌ एरर
structuredClone()डीप✅ डीप कॉपी❌ खो जाता है✅ संरक्षित✅ सपोर्टेड
lodash.cloneDeepडीप✅ डीप कॉपी✅ कॉपी✅ संरक्षित✅ सपोर्टेड

आधुनिक सर्वोत्तम: structuredClone() (2022+)

<script>
  const original = {
    name: "टेस्ट",
    date: new Date(),
    regex: /abc/,
    nested: {value: 42},
    self: null
  };
  original.self = original;  // सर्कुलर रेफरेंस
  
  // ब्राउज़र/Node 17+ में उपलब्ध
  const cloned = structuredClone(original);
  
  console.log(cloned.date instanceof Date);  // true
  console.log(cloned.nested === original.nested);  // false (डीप कॉपी)
</script>

सिफारिश

  • सरल फ्लैट ऑब्जेक्ट्स: {...obj} या Object.assign({}, obj)
  • नेस्टेड डेटा (नो फंक्शन्स/डेट/रेजेक्स): JSON.parse(JSON.stringify(obj))
  • जटिल डेटा (सर्कुलर, डेट, रेजेक्स): structuredClone() या लाइब्रेरी (Lodash)
  1. स्ट्रिंग को जावास्क्रिप्ट ऑब्जेक्ट में कैसे बदलें? स्ट्रिंग को जावास्क्रिप्ट ऑब्जेक्ट में कैसे बदलें?

    स्ट्रिंग को जावास्क्रिप्ट ऑब्जेक्ट में बदलने का कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang=en> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-width, initial-scale=1.0 /> <title>Document</title> <style>    

  1. जावास्क्रिप्ट में इम्पोर्टेड ऑब्जेक्ट को डीस्ट्रक्चर कैसे करें? जावास्क्रिप्ट में इम्पोर्टेड ऑब्जेक्ट को डीस्ट्रक्चर कैसे करें?

    जावास्क्रिप्ट में इम्पोर्टेड ऑब्जेक्ट को डीस्ट्रक्चर करने के लिए निम्नलिखित कोड है: उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />

  1. जावास्क्रिप्ट में मल्टीडाइमेंशनल ऑब्जेक्ट कैसे बनाएं? जावास्क्रिप्ट में मल्टीडाइमेंशनल ऑब्जेक्ट कैसे बनाएं?

    जावास्क्रिप्ट में मल्टीडाइमेंशनल ऑब्जेक्ट बनाने के लिए निम्नलिखित कोड है: उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title&