2016-08-15 11 views
6

आलसी-मैं सोच रहा हूं कि गुणों को किसी ऑब्जेक्ट (स्रोत) में किसी अन्य ऑब्जेक्ट (गंतव्य) पर कॉपी करने का बेहतर तरीका है, यदि गुण बाद में मौजूद हैं? यह अंडरस्कोर का उपयोग करने की ज़रूरत नहीं है।एक ऑब्जेक्ट से दूसरे ऑब्जेक्ट में गुणों की प्रतिलिपि

उदाहरण के लिए,

_.mixin({ 
    assign: function (o, destination, source) { 
     for (var property in source) { 
      if (destination.hasOwnProperty(property)) { 
       destination[property] = source[property]; 
      } 
     } 
     return destination; 
    } 
}); 

console.log(_().assign({ a: 1, b: 2, d: 3 }, { a: 4, c: 5 })) // a: 4, b: 2, d: 3 

उत्तर

3

एक आलसी विकल्प है:

_.extend(a, _.pick(b, _.keys(a))); 

_.pickगंतव्य वस्तु की .keys का उपयोग करके स्रोत वस्तु फिल्टर और परिणाम destinati विस्तार के लिए प्रयोग किया जाता है ऑब्जेक्ट पर।

यदि आप मूल ऑब्जेक्ट्स को संशोधित नहीं करना चाहते हैं तो बस _.extend फ़ंक्शन पर एक खाली ऑब्जेक्ट पास करें।

_.extend({}, a, _.pick(b, _.keys(a))); 
+1

हाहा, छोटा लेकिन बदसूरत। – Mikey

4

उपयोग Object.assign(obj1, obj2); (यदि गुण उत्तरार्द्ध में मौजूद हैं) जो ES6 में निवासी है (कोई Underscore.js आवश्यक है)।

Object.assign() विधि लक्ष्य वस्तु के लिए एक या अधिक स्रोत वस्तुओं से सभी गणनीय खुद गुण के मूल्यों की प्रतिलिपि करने के लिए किया जाता है। यह लक्ष्य वस्तु वापस कर देगा। More info here

उदाहरण:

var o1 = { a: 1 }; 
 
var o2 = { b: 2 }; 
 
var o3 = { c: 3 }; 
 

 
var obj = Object.assign(o1, o2, o3); 
 
console.log(obj);

वैकल्पिक रूप से उपयोग करने undescore.js

_.extend(destination, *sources)

या

_.extendOwn(destination, *sources)

Detailated जानकारी यहां पाया जा सकता: http://underscorejs.org/#extend

+2

"... केवल अगर गुण बाद में मौजूद हैं"। – undefined

+0

@ वोहमान आपकी टिप्पणी के लिए धन्यवाद मैंने संदर्भ के लिए मेरे उत्तर में एक नोट संपादित किया है। – GibboK

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

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