2013-08-07 3 views
6

मैं सिर्फ अजीब बात का अनुभव किया, इस कोड को मैं वास्तव में उपयोग कर रहा हूँ है:सरणी में लूप के लिए 'निकालें' पढ़ता है?

for (iter in data.List) { 
    console.log(iter); 
} 

आप उम्मीद करेंगे के रूप में, लॉग प्रत्येक पंक्ति की संख्या देना चाहिए (0, 1, 2 ...) , बजाय यह मुझे देता है यह:

0 
1 
2 
remove 

यह जानते हुए कि मेरी सरणी केवल 3 पंक्तियों

किसी को भी कभी भी इस encountred किया गया है?

+4

हमें वह कोड दिखाएं जो आपकी सूची बनाता है। –

+1

मैं सरणी के लिए 'इन इन' का उपयोग न करने की सिफारिश करता हूं (देखें http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea) –

+0

मैं [एमडीएन दस्तावेज 'के लिए' इन ...] के बारे में पढ़ने की सलाह देता हूं (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) । यह आपको बताता है कि समस्या क्या है। –

उत्तर

9

असल में, समस्या यह है कि आप for in लूप का उपयोग करके अपने सरणी के माध्यम से पुनरावृत्त कर रहे हैं, जो कि एरे के माध्यम से iteratung के लिए नहीं है। इसका उद्देश्य किसी ऑब्जेक्ट के सभी गुणों के माध्यम से पुनरावृत्त करना है, और जाहिर है कि आपकी सरणी पर remove नामक एक संपत्ति है।

for in पर अधिक जानकारी के लिए एरे के आने पर एक बुरा विचार है, Why is using "for...in" with array iteration a bad idea? देखें।

समाधान के रूप में, मैं अनुक्रमित for लूप का उपयोग करने का सुझाव दूंगा। इस प्रकार के पाश गुणों की परवाह नहीं करते हैं, इसलिए आप ठीक हैं। तो यह मूल रूप से एक बहुत ही शास्त्रीय करने के लिए नीचे आता है:

for (var i = 0; i < data.List; i++) { 
    console.log(data.List[i]); 
} 

वैसे: आप जावास्क्रिप्ट में कुछ भी अपरकेस नहीं करना चाहिए, जब तक कि यह एक निर्माता सुविधा नहीं होती। इसलिए यह data.list होना चाहिए।

पीएस: एक अच्छा पढ़ा जाता है जब यह सरणी और (गलत-) का उपयोग करता है, तो Fun with JavaScript Arrays पढ़ें, एक बहुत अच्छा पढ़ा।

+0

बहुत उपयोगी उत्तर, धन्यवाद! – Mehdiway

+0

यह मदद करता है, इस उत्तर को उत्तर के रूप में चिह्नित करना बहुत अच्छा होगा :-) –

+0

शेष समय के लिए उत्तर देने के लिए सही उत्तर के रूप में उत्तर देने का इंतजार कर रहा था;) – Mehdiway

6

हां, इस प्रकार for..in जावास्क्रिप्ट में काम करता है। यह सभी ऑब्जेक्ट गुणों (एरे इंडेक्स नहीं) पर बताता है। सरल समाधान: Arrays पर for..in का उपयोग न करें, क्योंकि यह इसके लिए नहीं है।

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