2013-03-03 4 views
7

के रूप में कहा गया है Here, ऐसा लगता है कि जावास्क्रिप्ट में एक मौजूदा सरणी खाली करने के लिए (और एक नया आवंटित करने के लिए नहीं) सबसे कारगर तरीका उपयोग करने के लिए है:जावास्क्रिप्ट में एक सादे वस्तु को खाली करने का सबसे प्रभावी तरीका क्या है?

array.length = 0; 

सादा की वस्तुओं की संचालन काम करता है? (उर्फ "सहयोगी सरणी" या "शब्दकोश") यदि नहीं, तो खाली एक मौजूदा जावास्क्रिप्ट ऑब्जेक्ट का सबसे प्रभावी तरीका क्या है?

मुझे लगता है कि एक नया आवंटन सबसे अच्छा विकल्प नहीं है, क्योंकि यह कचरा कलेक्टर को कुछ अतिरिक्त काम करेगा, और ढेर पर कुछ नई मेमोरी आवंटित करेगा, लेकिन मैं गलत हो सकता हूं।

मुझे एक ऐसे समाधान की आवश्यकता है जो कम से कम क्रोम और फ़ायरफ़ॉक्स के साथ काम करे।

+0

ऐसा नहीं दिखता है। तरंग = 0 सहयोगी सरणी के लिए काम करता है (http://jsfiddle.net/7XVym/)। – awbergs

+3

जेएस में सहयोगी सरणी नहीं है। क्या आप वस्तुओं का मतलब है? –

+0

क्या आप बस 'array = null;' नहीं कर सकते हैं? – insertusernamehere

उत्तर

22

ऐसा करने का सबसे छोटा तरीका एक नई वस्तु बनाना है। आप वैसे भी सभी संपत्तियों को एकत्रित कचरा खत्म कर देंगे।

var foo = { 
    a: 5, 
    b: 4 
}; 
foo = {}; 

तुम भी गुण से अधिक पुनरावृति और उन्हें एक करके निकाल सकता है:

for (var prop in foo) { 
    if (foo.hasOwnProperty(prop)) { 
     delete foo[prop]; 
    } 
} 

यह शब्दाडंबर के एक मामले के रूप में, उनका कहना लायक भी है, कि जावास्क्रिप्ट वस्तुओंसाथ गुण, नहीं है सहयोगी सरणी

+3

यह ध्यान दिया जाना चाहिए कि 'foo = {}' एक नई वस्तु बनाता है और ** मूल वस्तु को ** जैसा छोड़ देता है। मूल वस्तु के अन्य संदर्भ होने पर इससे कोई फर्क पड़ता है: 'var foo = {a: 5, b: 4}; var बार = foo; foo = {}; ' अंत में, 'बार' अभी भी' {a: 5, b4} 'और ** नहीं **' {} 'जैसा कि कोई उम्मीद कर सकता है। – Ignitor

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

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