2012-06-22 14 views
5

संभव डुप्लिकेट:
How can I merge properties of two JavaScript objects dynamically?आप जावास्क्रिप्ट में दो ऑब्जेक्ट्स को कैसे जोड़ते हैं?

अगर मैं दो जावास्क्रिप्ट वस्तुओं जो मैं कुंजी-मान जोड़ों की एक सूची के रूप में उपयोग कर रहा हूँ है:

var a = {a:1}; 
var b = {b:2}; 

जो सबसे अधिक है उन्हें एक तीसरे ऑब्जेक्ट में गठबंधन करने का कुशल तरीका जिसमें दोनों के गुण शामिल हैं?

var c = {a:1, b:2}; 

मुझे कोई आपत्ति नहीं है, तो या तो या a और b के दोनों प्रक्रिया में संशोधित कर रहे हैं है।

+0

एक संपत्ति किसी अन्य वस्तु या किसी सरणी शामिल है, तो आप चाहते हैं नई वस्तु में एक नई प्रति या उस संपत्ति का संदर्भ? – jfriend00

+0

यह एक डुप्लिकेट क्या प्रश्न है? – Armand

+0

var a = {a: 1, c: 4}; \t var बी = {बी: 2, एफ: 9, डी: 4}; \t \t var c = combine (a, b); \t \t समारोह गठबंधन (array1, array2) { \t (array2 में महत्वपूर्ण) { \t \t \t array1 [कुंजी] = array2 [कुंजी] के लिए \t; \t \t} \t \t \t \t वापसी array1 \t} – Tarun

उत्तर

5

आप बस कर सकते हैं:

:

var c = {}; 
    for (var key in a) { 
     c[key] = a[key]; 
    } 
    for (var key in b) { 
     c[key] = b[key]; 
    } 

आप एक गहरी विलय करना चाहते हैं तो (यह मानते हुए आप कार्य करता है और प्रोटोटाइप कॉपी नहीं करना चाहते हैं), तो आप इस का उपयोग कर सकते

function goclone(source) { 
     if (Object.prototype.toString.call(source)==='[object Array]') { 
      var clone = []; 
      for (var i=0; i<source.length; i++) { 
       if (source[i]) clone[i] = goclone(source[i]); 
      } 
      return clone; 
     } else if (typeof(source)=="object") { 
      var clone = {}; 
      for (var prop in source) { 
       if (source[prop]) { 
        var firstChar = prop.charAt(0); 
        clone[prop] = goclone(source[prop]); 
       } 
      } 
      return clone; 
     } else { 
      return source; 
     } 
    } 


    var c = {}; 
    for (var key in a) { 
     c[key] = goclone(a[key]); 
    } 
    for (var key in b) { 
     c[key] = goclone(b[key]); 
    } 

लेकिन स्पष्ट रूप से मैं कभी नहीं जावास्क्रिप्ट में एक गहरी विलय के लिए उपयोग देखा ...

+0

यह केवल आदिम डेटा प्रकारों के लिए काम करेगा। किसी ऑब्जेक्ट प्रकार का संदर्भ केवल तभी किया जाएगा। –

+1

यहां तक ​​कि गैर-गणना योग्य गुणों की प्रतिलिपि बनाना? नेस्टेड ऑब्जेक्ट्स को ध्यान में रखते हुए नहीं? ओह अब छोड़िए भी! :-) –

+1

क्लोनिंग से अलग होने पर दीप क्लोनिंग ... –

संबंधित मुद्दे