2012-01-18 19 views
5
के आधार पर

संभव डुप्लिकेट:एक वस्तु बनाने के लिए 2 अन्य

a = { 
    a: 1, 
    af: function() { console.log(this.a) }, 
}; 
b = { 
    b: 2, 
    bf: function() { console.log(this.b) }, 
}; 

मैं अब क्या करना चाहते हैं:
How can I merge properties of two JavaScript objects dynamically?

मैं दो वस्तुओं ए और बी इस तरह परिभाषित किया गया है एक और ऑब्जेक्ट बनाना है जो ए और बी के गुण प्राप्त करेगा, जैसे:

c = { 
    a: 1, 
    af: function() { console.log(this.a) }, 
    b: 2, 
    bf: function() { console.log(this.b) }, 
} 

ध्यान दें कि ए और बी को वही रहने की आवश्यकता है।

यह कैसे करना है इसका कोई विचार?

उत्तर

2

आप ए और बी दोनों के लिए लूप में एक कर सकते हैं, और सभी hasOwn गुणों को एक नई वस्तु में कॉपी कर सकते हैं।

var c = {}; 
for (var p in a) 
    if(a.hasOwnProperty(p)) 
     c[p] = a[p]; 
for (var p in b) 
    if(b.hasOwnProperty(p)) 
     c[p] = b[p]; 

DEMO


या, यदि आप jQuery का उपयोग किया हो, तुम कर सकते हो:

var c = $.extend({}, a, b); 
+0

jQuery समाधान शानदार है! –

+0

@ निकोलसबाडिया - हाँ, $ .extend महान है –

1
var i, c={}; 
for (i in a) { if (a.hasOwnProperty(i)) { c[i] = a[i]; } } 
for (i in b) { if (b.hasOwnProperty(i)) { c[i] = b[i]; } } 

आप कर सकते हैं सार अपनी खुद की "extend" function similar to the one provided by jQuery में इस कार्यक्षमता:

function extend() { 
    var i, j, x, o=(arguments[0] || {}); 
    for (i=1; i<arguments.length; i++) { 
    x = arguments[i]; 
    for (j in x) { if (x.hasOwnProperty(j)) { o[j] = x[j]; } } 
    } 
    return o; 
} 
var c = extend({}, a, b); 
1
var desc = Object.getOwnPropertyDescriptor, 
    props = Object.getOwnPropertyNames, 
    define = Object.defineProperty; 

function extend(target) { 
    return { 
     with: function(source) { 
      props(source).forEach(function(key) { 
       define(target, key, desc(source, key)); 
      }); 
     } 
    }; 
} 

तो अब हम जा सकते हैं

तरह
var c = Object.create(null); 

extend(c).with(a); 
extend(c).with(b); 

अस्वीकरण: प्रदान की कोड मान हम एक ES5 या ES5 में हैं पर्यावरण shimed!

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