क्या एक से अधिक द्वारा लूप वेतन वृद्धि / गिरावट के लिए?


119

वहाँ forजावास्क्रिप्ट में एक पाश वृद्धि के अलावा अन्य तरीके हैं i++और ++i? उदाहरण के लिए, मैं एक के बजाय 3 से वेतन वृद्धि करना चाहता हूं।

for (var i = 0; i < myVar.length; i+3) {
   //every three
}

4
आप तीसरे तर्क के लिए सिर्फ i = i + 3 स्थानापन्न कर सकते हैं? या वह केवल जावा में है?
CptJesus

1
हाँ यह ठीक है i++और ++iकी तरह हैं i+=1, इसलिए यदि पाश घोषणा के लिए में इस्तेमाल किया i+=3काम करेगा।
elclanrs

1
एक forपाश कुछ भी वृद्धि नहीं करता है। forकथन में प्रयुक्त आपका कोड करता है। यह पूरी तरह से आप पर निर्भर करता है कि कैसे / अगर / जहां / जब आप iउस मामले के लिए किसी अन्य चर को संशोधित या बदलना चाहते हैं ।
मैं

2
यह लूप के लिए नहीं है, यह एक अनंत लूप है। आपका मतलब है i+=3
निन्जाएजेको

2
मुझे लगता है कि यह एक सरल समाधान के साथ एक सरल प्रश्न है, लेकिन पतन का कारण क्या है? मुझे पूरा यकीन है कि यह डुप्लिकेट नहीं है।
ब्रेंटनस्ट्राइन

जवाबों:


253

+= असाइनमेंट ऑपरेटर का उपयोग करें :

for (var i = 0; i < myVar.length; i += 3) {

तकनीकी रूप से, आप किसी भी अभिव्यक्ति को लूप की अंतिम अभिव्यक्ति में रख सकते हैं, लेकिन इसका उपयोग आमतौर पर काउंटर चर को अपडेट करने के लिए किया जाता है।

लूप के प्रत्येक चरण के बारे में अधिक जानकारी के लिए, MDN आलेख देखें


विवरण के लिए धन्यवाद - मुझे पूरा यकीन था कि तीसरे स्लॉट में और अधिक उन्नत अभिव्यक्ति डालने का एक तरीका था - मैं अभी भूल गया था कि इसे चर को परिभाषित करने की आवश्यकता है, इसलिए स्पष्ट रूप से i+3काम नहीं करता है।
ब्रेंटनस्ट्राइन

@brentonstrine: कोई बात नहीं, खुशी है कि मैं मदद कर सकता था
एंड्रयू

जब हम करते हैं तो अंतहीन लूप का कारण क्या है i+3?
संजय श्री

1
@SanjayShr i+3का मान नहीं बदलताi
नाहिद

@ नाहिद जी, मैंने अपने उत्तर पर टिप्पणी की। थैंक्स
संजय श्री

13

एक forलूप:

for(INIT; TEST; ADVANCE) {
    BODY
}

निम्नलिखित का मतलब है:

INIT;
while (true) {
    if (!TEST)
        break;
    BODY;
    ADVANCE;
}

आप के लिए लगभग किसी भी अभिव्यक्ति लिख सकते हैं INIT, TEST, ADVANCE, और BODY

ध्यान दें कि ++ऑपरेटर और वेरिएंट साइड-इफेक्ट वाले ऑपरेटर हैं (यदि आप उन्हें i+=1और इस तरह उपयोग नहीं कर रहे हैं तो उन्हें बचने की कोशिश करनी चाहिए :

  • ++i माध्यम i+=1; return i
  • i++ माध्यम oldI=i; i+=1; return oldI

उदाहरण:

> i=0
> [i++, i, ++i, i, i--, i, --i, i]
[0, 1, 2, 2, 2, 1, 0, 0]


5

एंड्रयू व्हिटाकर का जवाब सही है, लेकिन आप किसी भी भाग के लिए किसी भी अभिव्यक्ति का उपयोग कर सकते हैं।
बस याद रखें कि दूसरी (मध्य) अभिव्यक्ति का मूल्यांकन करना चाहिए ताकि इसकी तुलना बूलियन trueया से की जा सके false

जब मैं एक forलूप का उपयोग करता हूं, तो मैं इसके बारे में सोचता हूं

for (var i = 0; i < 10; ++i) {
    /* expression */
}

होने के नाते

var i = 0;
while( i < 10 ) {
    /* expression */
    ++i;
}

1

आप निश्चित रूप से कर सकते हैं। दूसरों ने सही ढंग से बताया है कि आपको क्या करने की आवश्यकता है i += 3। आप वह नहीं कर सकते जो आपने पोस्ट किया है क्योंकि आप जो भी यहां कर रहे हैं वह सब जोड़ रहा है i + 3लेकिन परिणाम को कभी वापस नहीं सौंप रहा है ii++के लिए सिर्फ एक आशुलिपि है i = i + 1, इसी तरह के i +=3लिए एक आशुलिपि है i = i + 3


1
for (var i = 0; i < myVar.length; i+=3) {
   //every three
}

अतिरिक्त

Operator   Example    Same As
  ++       X ++        x = x + 1
  --       X --        x = x - 1
  +=       x += y      x = x + y
  -=       x -= y      x = x - y
  *=       x *= y      x = x * y
  /=       x /= y      x = x / y
  %=       x %= y      x = x % y

-1

टर्नेरी ऑपरेटर का अंतिम भाग आपको वेतन वृद्धि के चरण को निर्दिष्ट करने की अनुमति देता है। उदाहरण के लिए, i ++ का मतलब है कि वेतन वृद्धि 1. i + = 2 i = i + 2, ... आदि के समान है। उदाहरण:

let val= [];

for (let i = 0; i < 9; i+=2) {
  val = val + i+",";
}


console.log(val);

अपेक्षित परिणाम: "2,4,6,8"

वांछित चरण आकार के आधार पर 'i' कोई भी फ्लोटिंग पॉइंट या पूरी संख्या हो सकती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.