2012-02-14 8 views
11

का उपयोग कर jQuery डीप/रिकर्सिव कॉपी। मैं jQuery $ .extend का उपयोग करके दो ऑब्जेक्ट्स को मर्ज करने का प्रयास कर रहा हूं।

निम्नलिखित कोड का उपयोग करके, मैं सतर्क करने की कोशिश कर रहा हूं ("बॉल - स्टंप - अंपायर")। लेकिन वर्तमान आउटपुट ("अपरिभाषित - स्टंप - अंपायर") है। यह गहरी (रिकर्सिव) प्रति प्राप्त नहीं करता है। हम इसे कैसे ठीक करते हैं?

$(document).ready(function() { 

     debugger; 

     //$.extend 
     var obj3 = { throwable: { text1: 'Ball' }, text3: 'Umpire' }; 
     var obj4 = { throwable: { text4: 'Bat' }, text2: 'Stump' } 

     //Simple Copy 
     var result1 = $.extend(obj3, obj4); 
     //alert(result1.throwable.text4 + " - " + result1.text2 + " - " + result1.text3); 


     //Deep Copy 
     //First parameter is passed as Boolean true to accomplish deep (recursive) copy 
     var result2 = $.extend(true, obj3, obj4); 
     alert(result2.throwable.text1 + " - " + result2.text2 + " - " + result2.text3); 


    }); 

संपादित करें: मैं

(Deep) copying an array using jQuery

+0

प्रश्नों से संबंधित ** इनमें से एक ** 'asp.net' 'net' jquery-ui' 'jquery-plugins' टैग कैसे है? – gdoron

उत्तर

7

आपकी दूसरी कोड का टुकड़ा काम के रूप में उम्मीद करता है और जब अलगाव में चलाने obj3, में obj4 की गहरी प्रतिलिपि प्रदर्शन करती है।

समस्या पिछले कोड स्निपेट पहले से ही obj3 में एक उथलेobj4 की प्रतिलिपि प्रदर्शन किया है, पूरी तरह से इस प्रक्रिया में obj4 के साथ अपने throwable सदस्य अधिभावी, है। इसलिए, उस कोड के चलने के बाद के भीतर throwable.text1 मौजूद नहीं है।

  • प्रारंभ में, obj3 है:

    { throwable: { text1: 'Ball' }, text3: 'Umpire' } 
    
  • के बाद पहले कोड स्निपेट चलने के बाद, obj3 हो जाता है:

    { throwable: { text4: 'Bat' }, text3: 'Umpire', text2: 'Slump' } 
    
  • अंत में, के बाद दूसरी कोड का टुकड़ा समाप्त हो गया है, obj3 अभी भी है:

    { throwable: { text4: 'Bat' }, text3: 'Umpire', text2: 'Slump' } 
    
+0

बहुत स्पष्ट स्पष्टीकरण के लिए धन्यवाद। – Lijo

0

में भेजा अपने कोड में, text1 संपत्ति extend द्वारा ओवरराइट है। मैं चाहता हूं कि आप एक विधि चाहते हैं जो स्ट्रिंग को दूषित करे, अपना कोड कोड करें, extend ऐसा न करें।

कुछ की तरह:

function(o1, o2) { 
    var ores = {}; 
    for(var p in o1) ores.p = o1.p; 
    for(var p in o2) ores.p = ores.p ? ores.p+o2.p : o2.p; 
    return ores; 
} 
+0

@Lijo यदि आप अंतर देखना चाहते हैं: [देखें] (http://api.jquery.com/jQuery.extend/) – Hadas

+0

एक पुनरावर्ती विलय बनाना srting को सम्मिलित नहीं करेगा! – sinsedrix

+0

तो ऐसा लगता है कि अब wotk ... समस्या क्या है? – sinsedrix

0

समस्या है, वस्तुओं में ही नाम के दो गुण देखते हैं कि: टेक्स्ट 1। यहां तक ​​कि गहरे विस्तार के साथ, jquery विस्तार इसे एक नई कॉन्सट स्ट्रिंग या सरणी में विलय नहीं करता है।

दीप प्रति प्रासंगिक है, यदि आपकी संपत्तियों में से कोई एक अन्य वस्तु है। गहरे विस्तार के साथ, बच्चे के ऑब्जेक्ट के सभी गुण विलय हो जाते हैं न केवल बच्चे की वस्तु ही।

मुझे लगता है कि आपको अपने विस्तारित कार्य के साथ जाना है।

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