2012-03-26 10 views
9

क्या किसी ऑब्जेक्ट को क्लोन करने का कोई प्रभावी तरीका अभी तक निर्दिष्ट गुणों को छोड़ सकता है? आदर्श रूप से $ .extend फ़ंक्शन को फिर से लिखने के बिना?

var object = { 
    "foo": "bar" 
    , "bim": Array [1000] 
}; 

// extend the object except for the bim property 
var clone = $.extend({}, object, "bim"); 
// = { "foo":"bar" } 

मेरा लक्ष्य उन चीज़ों की प्रतिलिपि बनाकर संसाधनों को सहेजना है जो मैं उपयोग नहीं कर रहा हूं।

+1

क्या बाद में उन गुणों unsetting के बारे में? –

+0

मैं ऐसा कर सकता हूं, यह सिर्फ इतना है कि मैं संपत्ति की प्रतिलिपि बनाने के समय और संसाधनों को बर्बाद नहीं करना चाहता हूं। उदाहरण के लिए, यदि किसी निश्चित संपत्ति का मान एक बड़ी सरणी थी तो मैं इसे कॉपी नहीं करना चाहूंगा। – stinkycheeseman

उत्तर

9

jQuery.extend एक अनगिनत तर्क लेता है, इसलिए कार्यक्षमता को तोड़ने के बिना, आपके अनुरोधित प्रारूप को फिट करने के लिए इसे फिर से लिखना संभव नहीं है।

हालांकि, आप आसानी से संपत्ति का विस्तार करने के बाद, हटाने delete ऑपरेटर का उपयोग कर सकते हैं:

var object = { 
    "foo": "bar" 
    , "bim": "baz" 
}; 

// extend the object except for the bim property 
var clone = $.extend({}, object); 
delete clone.bim; 
// = { "foo":"bar" } 
+0

आह, तो किसी निश्चित संपत्ति को दबाने का कोई तरीका नहीं है? मैं उन चीजों की प्रतिलिपि बनाने में बहुत अधिक समय/संसाधन खर्च नहीं करने की कोशिश कर रहा हूं जिन्हें मैं उपयोग नहीं कर रहा हूं। – stinkycheeseman

+2

@stinkycheeseman एक नया कार्यान्वयन किए बिना नहीं। यदि आप रुचि रखते हैं, तो 'jQuery.extend' का एनोटेटेड स्रोत कोड यहां दिया गया है: http://james.padolsey.com/jquery/#v=git&fn=jQuery.extend –

+0

मेरे पास एक ही आवश्यकता है क्योंकि हैश में " अभिभावक ", और माता-पिता फिर से बच्चों को इंगित करते हैं, और यह अनंत लूप में जाता है, इसलिए मैं भी" पैरेंट "जैसी कुंजी से बचना चाहता था, जबकि यह गहरी प्रतिलिपि करता है –

0

आप संग्रह कर सकते हैं क्या आप या तो pick या omitunderscore से साथ चाहते हैं, वे दोनों की एक प्रतिलिपि बनाने के लिए अनुमति देते एक वस्तु और फिल्टर स्रोत ऑब्जेक्ट से कुछ चाबियाँ शामिल या कॉपी/क्लोन में लोप हो रहे हैं:

var object = { 
    "foo": "bar" 
    , "bim": Array [1000] 
}; 

// copy the object and omit the desired properties out 
// _.omit(sorceObject, *keys) where *keys = key names separated by coma or an array of keys 
var clone = _.omit(object, 'bim'); 
// { "foo":"bar" } 
संबंधित मुद्दे