2013-02-04 32 views
11

में दो चर घोषित करना क्या लूप के प्रारंभिक भाग में दो चर घोषित करना संभव है? मैं एक स्ट्रिंग के प्रत्येक चरित्र पर एक फ़ंक्शन कॉल करना चाहता हूं।लूप

for(var i = 0, c = aString.charAt(i); i < aString.length; i++){//problem here: not itterating 
    alert("c: "+c) 
    func1[typeOfChar(c)]++ 
} 

समस्या हमेशा स्ट्रिंग के पहले अक्षर है स्ट्रिंग भावना c में itterated नहीं जा रहा है। alert बस रास्ते में मुसीबत शूटिंग उद्देश्यों के लिए था।

मुझे उत्सुकता है, c को घोषित होने पर var कीवर्ड की आवश्यकता नहीं है?

अपडेट: इसे काम कर रहा है। मैं पूछने वाला नहीं था लेकिन मुझे लगता है कि संपादन अभी भी किए जा रहे हैं, मैं अर्ध-कॉलन का उपयोग नहीं कर रहा हूं क्योंकि वे वैकल्पिक हैं। उनके लिए लूप के लिए कैसे लिखा जा सकता है? मैं उन्हें नहीं जोड़ता क्योंकि मैं इसे कम सरल के रूप में देखता हूं, या क्या वे पठनीयता में सुधार करते हैं?

+1

घने होने के लिए खेद है, लेकिन तुम सिर्फ बयान नहीं कर पाए 'ग = aString .charAt (i) 'लूप के लिए पहली पंक्ति पर? –

+1

आपने क्या प्रयास किया है? क्या आपके पास कोड है? और यदि नहीं, तो आप क्या त्रुटि देखते हैं? –

+2

@JasonHall उपयोगकर्ता> 1000 प्रतिनिधि के साथ, 11 सवालों के जवाब दिए और बहुत अच्छे रैंक वाले प्रश्न हैं। मुझे लगता है कि समुदाय ने इस प्रयोक्ता में यह विश्वास करने के लिए पर्याप्त विश्वास दिखाया है कि उसने कोशिश की थी। –

उत्तर

18

आप c तरह हर यात्रा में बदलने के लिए, लूप के शुरू में यह घोषणा करने के लिए नहीं, कोशिश

var i,c; 
for(i = 0,c=aString.charAt(0); i < aString.length; ++i, c = aString.charAt(i)){ 
    alert("c: "+c) 
    func1[typeOfChar(c)]++ 
} 

क्या यह लायक है मैं इसे नहीं लगता कि बहुत पठनीय कोड बनाता है के लिए चाहते हैं, मैं इसे पहली पंक्ति में रखेगा।

यहां कुछ जानकारी on the comma operator है जिसका आप उपयोग कर रहे हैं।

यह भी ध्यान रखें कि जावास्क्रिप्ट में लूप के लिए कोई ब्लॉक स्कोपिंग नहीं है, इसलिए आप वास्तव में मौजूदा स्कोप के शीर्ष पर i और c घोषित कर रहे हैं (यह आमतौर पर वर्तमान फ़ंक्शन का शीर्ष होता है, या वैश्विक दायरे का शीर्ष होता है)। http://jsfiddle.net/maWua/

+0

यह काम नहीं करता है। – Bergi

+0

@ बर्गि आप सही हैं, मैंने पहले पुनरावृत्ति पर सी शुरू नहीं किया था, जावास्क्रिप्ट में लूप वास्तव में 0 आधारित हैं। मैंने एक संपादन किया। –

+0

बीटीडब्ल्यू, ओपी ने अल्पविराम ऑपरेटर का उपयोग नहीं किया। – Bergi

0

यहाँ:

यहाँ एक बेला है

c = aString.charAt(i) 

i हमेशा शून्य है, इसलिए यह अपेक्षा के अनुरूप काम करने के लिए नहीं जा रहा है। प्रारंभ एक बार होता है और आप इनिट के दौरान चार प्राप्त करने की कोशिश कर रहे हैं जब मुझे अभी 0 में प्रारंभ किया गया है।

+0

'i ++' को 'i' के मान को बदलना चाहिए। –

1

इस मामले में, क्योंकि c (और एक अपरिवर्तनीय) i पर केवल निर्भर है और यह नहीं पाश की सशर्त प्रयोग किया जाता है, मैं पाश निर्माण से हटाने की सलाह देते हैं:

// (Keep variable hoisting in mind) 
for(var i = 0; i < aString.length; i++){ 
    var c = aString.charAt(i); 
    alert("c: "+c); 
    // .. 
}; 

(मूल के साथ समस्या यह

0

हाँ, यह एक multiple var statement का उपयोग करके संभव है कि यह c का मूल्य अद्यतन नहीं है।), और आप सफलतापूर्वक किया है। हालांकि, इसे प्रारंभिक वक्तव्य में केवल एक बार असाइन करने से यह बदलेगा नहीं।

आप या तो पाश से पहले और प्रत्येक पाश के बाद एक बार यह करने के लिए बारी की आवश्यकता होगी

for (var i=0, c=str.charAt(i); i<str.length; c=str.charAt(++i)) … 

या आप हालत में प्रत्येक बारी से पहले यह करना

for (var i=0, c; c=str.charAt(i), i<str.length; i++) … // comma operator 
for (var i=0, c; c=str.charAt(i); i++) … // empty string as condition 

या बस के अंदर ले जाने के लूप

for (var i=0, c; i<str.length; i++) { c=str.charAt(i); … } 
1

आपको लूप के शरीर के अंदर c = aString.charAt(i); रखना चाहिए।

उदाहरण के लिए:

for(var i = 0; i < aString.length; i++){ 
    c = aString.charAt(i); 
    alert("c: "+c); 
    func1[typeOfChar(c)]++ 
} 
3

सरल तरीका घोंसले के बिना पाश के लिए एक में एक से अधिक incrementing चर शामिल करने के लिए। यह उदाहरण 3 चर घोषित करता है।

for (var i = 0, j = 1, n = 2; i < 50, n < 50; i = i + 3, j = j + 3, n = n + 3){ 
    console.log("variable i: " + i); 
    console.log("variable j: " + j); 
    console.log("variable n: " + n); 
} 

codepen देखें here

0

एक अन्य विकल्प while उपयोग कर रहा है, कुछ मामले में यह स्पष्ट है जैसे कि:

var i = 0; 
while(i < aString.length){ 
    c = aString.charAt(i); 
    alert("c: "+c) 
    func1[typeOfChar(c)]++ 
    i++; 
}