brentonstrine
brentonstrine

Reputation: 22772

Can a for loop increment/decrement by more than one?

Are there other ways to increment a for loop in Javascript besides i++ and ++i? For example, I want to increment by 3 instead of one.

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

Upvotes: 201

Views: 531843

Answers (9)

Fellipe Sanches
Fellipe Sanches

Reputation: 8165

For those who are looking to increment pair of numbers (like 1-2 to 3-4):

Solution one:

//initial values
var n_left = 1;
var n_right = 2;
    
for (i = 1; i <= 5; i++) {
        
    console.log(n_left + "-" + n_right);   
        
    n_left =+ n_left+2;
    n_right =+ n_right+2; 
}
//result: 1-2 3-4 5-6 7-8 9-10

Solution two:

for (x = 0; x <= 9; x+=2) {
    
    console.log((x+1) + "-" + (x+2));  

}
//result: 1-2 3-4 5-6 7-8 9-10

Upvotes: 2

JavascriptIsAwesome
JavascriptIsAwesome

Reputation: 21

There is an operator just for this. For example, if I wanted to change a variable i by 3 then:

var someValue = 9;
var Increment  = 3;
for(var i=0;i<someValue;i+=Increment){
//do whatever
}
to decrease, you use -=
var someValue = 3;
var Increment  = 3;
for(var i=9;i>someValue;i+=Increment){
//do whatever
}

Upvotes: 2

Neville Lusimba
Neville Lusimba

Reputation: 887

The last part of the ternary operator allows you to specify the increment step size. For instance, i++ means increment by 1. i+=2 is same as i=i+2,... etc. Example:

let val= [];

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


console.log(val);

Expected results: "2,4,6,8"

'i' can be any floating point or whole number depending on the desired step size.

Upvotes: 2

Adil Malik
Adil Malik

Reputation: 6357

for (var i = 0; i < 10; i = i + 2) {
    // code here
}​

Upvotes: 10

Jayantha
Jayantha

Reputation: 2349

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

additional

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

Upvotes: 5

ninjagecko
ninjagecko

Reputation: 91149

A for loop:

for(INIT; TEST; ADVANCE) {
    BODY
}

Means the following:

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

You can write almost any expression for INIT, TEST, ADVANCE, and BODY.

Do note that the ++ operators and variants are operators with side-effects (one should try to avoid them if you are not using them like i+=1 and the like):

  • ++i means i+=1; return i
  • i++ means oldI=i; i+=1; return oldI

Example:

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

Upvotes: 16

Sudesh Banskota
Sudesh Banskota

Reputation: 81

You certainly can. Others have pointed out correctly that you need to do i += 3. You can't do what you have posted because all you are doing here is adding i + 3 but never assigning the result back to i. i++ is just a shorthand for i = i + 1, similarly i +=3 is a shorthand for i = i + 3.

Upvotes: 2

Paul S.
Paul S.

Reputation: 66404

Andrew Whitaker's answer is true, but you can use any expression for any part.
Just remember the second (middle) expression should evaluate so it can be compared to a boolean true or false.

When I use a for loop, I think of it as

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

as being

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

Upvotes: 5

Andrew Whitaker
Andrew Whitaker

Reputation: 126072

Use the += assignment operator:

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

Technically, you can place any expression you'd like in the final expression of the for loop, but it is typically used to update the counter variable.

For more information about each step of the for loop, check out the MDN article.

Upvotes: 386

Related Questions