Step in a cycle for

4

I want to put the values between -20 and 30 within a array , the part of a size that is 10. My problem is that I can put the values, but the size of the array gets with 11 values.

max=30;
min=-20;
step=10;
arr_text_y=[];

var calc = max - min;
var div = calc / step;
var value =  min + div;
arr_text_y[0] = min;
for(var i = 1; i <= step; i++)
{
    var val = arr_text_y[i-1] + div;
    var fixed = Math.round(val * 100) / 100;
    arr_text_y[i] = fixed;
}
console.log(arr_text_y);
    
asked by anonymous 23.05.2015 / 13:14

3 answers

3

In Javascript the index of a array starts from 0 , not 1 , so the result of your code is right.

Alternatively you can do:

max  = 30;
min  =-20;
step = 5;
arr_text_y = [];

for (var i = min; i <= max; i += step){
    if (arr_text_y.length == 10) // Se tiver 10 elementos, interrompe.
       break;
    arr_text_y.push(i);
}
alert(arr_text_y);
    
23.05.2015 / 13:39
1

You are making a lot of error in your function.

1º- 30 -(-20) = 50. se sua ideia era que desse 10 voce deve colocar min=20, ou max+min(sendo 30+(-20)=10).

2º- Se voce quer que passe 10x no for seria (i=1; i<=10; i++)

3º- var fixed = Math.round(val * 100) / 100; Sempre será fixed=val.Creio que seu intuito seria Math.round(val / 100) * 100; - para arredondar.
    
23.05.2015 / 13:47
0

The question here is relatively simple to get in your code, which is fine, but if you want it to be only 10 steps (as defined in the steps variable), one of the following small changes is sufficient, which in my opinion has nothing to see with the indexes, that this is well defined:

max=30;
min=-20;
step=10;
arr_text_y=[];

var calc = max - min;
var div = calc / step;
var value =  min + div; //não está a ser utilizado.
arr_text_y[0] = min;
for(var i = 1; i < step; i++) //Tirar o igual para ele só passar no ciclo 9 vezes, vai assim ignorar o último valor.
                              //Para retirar o primeiro em vez do último, poderá utilizar a variável que não está a ser utilizada assim: arr_text_y[0] = value;
{
    var val = arr_text_y[i-1] + div;
    var fixed = Math.round(val * 100) / 100;
    arr_text_y[i] = fixed;
}
console.log(arr_text_y);

Or, for me the most correct would be:

max=30;
min=-20;
step=10;
arr_text_y=[];

var calc = max - min;
var div = calc / (step-1); //Para que sejam mesmo os valores entre os -20 e os 30 inclusive, em 10 passos. 
var value =  min + div; //não está a ser utilizado.
arr_text_y[0] = min;
for(var i = 1; i <= step; i++)
{
    var val = arr_text_y[i-1] + div;
    var fixed = Math.round(val * 100) / 100;
    arr_text_y[i] = fixed;
}
console.log(arr_text_y);

This is due to a small mistake made by all of us unconsciously, that we forget that if we want to go from 1 to 10 in 10 steps, we have to take 9 steps, if we consider the least, our first number:

calc = max - min = 10 - 1 = 9

.

    
27.05.2015 / 03:51