2010-10-26 7 views
47

मैं बटन को "स्पष्ट" दबाए जाने पर अपने खींचे गए निर्देशांक वाले सरणी को खाली करने की कोशिश कर रहा हूं।जावास्क्रिप्ट की array.clear() फ़ंक्शन नहीं है?

जब मैं drawnDivs.clear() पर कॉल करता हूं, तो मुझे एक त्रुटि मिलती है कि यह कोई फ़ंक्शन नहीं है। drawnDivs निश्चित रूप से एक सरणी है, और मेरे पास Firebugconsole.log प्रिंटिंग चीजें हैं। यह hosted here है।

+1

ब्याज से, आपको स्पष्ट() का उपयोग करने का विचार कहां मिला? यह जावास्क्रिप्ट का हिस्सा नहीं प्रतीत होता है। – thomasrutter

+0

आह दृश्य मूल की तरह दिखता है :) – thomasrutter

+0

एक Google खोज ने मुझे यहां प्राप्त किया: http://www.roseindia.net/java/javascript-array/javascript-array-clear.shtml –

उत्तर

71

नहीं, यह नहीं है। लेकिन drawnDivs.length = 0 काम करना चाहिए।

+1

यह काम करेगा यदि यह एक वास्तविक सरणी है, और न केवल एक सरणी की तरह वस्तु। – thomasrutter

+3

@ थॉमसट्रटर। सच है लेकिन यह सरणी पर परिभाषित संदर्भों और किसी अन्य अतिरिक्त गुणों और कार्यों को संरक्षित रखेगा। – jordanbtucker

+0

हां, यह अभी भी समग्र रूप से सबसे अच्छा समाधान है। और ईमानदार होने के लिए, यह अभी भी सरणी जैसी वस्तुओं पर काम करेगा, यह किसी भी मौजूदा सदस्यों को तुरंत स्मृति से मुक्त नहीं करेगा। तो वास्तव में केवल एक मामूली बात है। – thomasrutter

8

drawnDivs = [];

+25

सावधान रहें, क्योंकि इससे ऑब्जेक्ट के अन्य संदर्भों को संशोधित नहीं किया जाएगा। –

3

स्टैक ओवरफ़्लो प्रश्न How do I empty an array in JavaScript? में इसका उत्तर दिया गया था। जवाब से

दो उदाहरण:

var A = ['some', 'values', 'here']; 

//Method 1 

//(This was my original answer to the question) 

A = []; 




// Method 2 (as suggested by Matthew Crumley) 

A.length = 0 

और here is a nice write up डॉ एक्सल Rauschmayer द्वारा इन दोनों तरीकों पर।

+0

निर्दिष्ट लिंक में चयनित उत्तर सही समाधान नहीं है क्योंकि यह उन चरों को साफ़ नहीं करता है जो सरणी को साफ़ किया जा रहा है। उस धागे में सही उत्तर http://stackoverflow.com/a/8134354/206687 –

+0

है, जबकि यह लिंक प्रश्न का उत्तर दे सकता है, यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – Claies

+0

@AndrewCounts किया। नजदीक के लिए धन्यवाद। – subhaze

0

आप वैकल्पिक रूप से प्रोटोटाइप लाइब्रेरी का उपयोग कर सकते हैं और फिर प्रोटोटाइप की clear() विधि का उपयोग कर सकते हैं।

+1

एक वैकल्पिक तरीका हो सकता है, लेकिन मुझे लगता है कि एक सरणी को साफ़ करने के लिए पुस्तकालयों के उपयोग के बिना बहुत आसान तरीके हैं। –

+2

हाँ - यह काम करेगा, लेकिन यह एक फ्लाई को मारने के लिए एक स्लेजहैमर का उपयोग कर रहा है। –

2

यह करने के लिए एक अनुकूलित तरीका है:

while (arr.pop()) {} 

देखें http://jsperf.com/kbk-clear-array/2

+1

यह विफल रहता है अगर सरणी खाली स्लॉट है। ऐसा करना चाहिए: 'जबकि (arr.length> 0) { arr.pop(); } ' – Geoff

+0

** नहीं, यह होना चाहिए: **' जबकि (arr.length) {arr.pop(); } ' –