对于从另一个数组获取的值的循环增量

时间:2017-02-15 18:39:36

标签: javascript

var z=[1,1,1,1,1,5,1,1,3]

 var data1=[];;

for(var q=0;q<20;q=q+z)

我希望增加不像q++这样的常规模式中的值,但是增量是以+1,+1,+1,+1,+1,+5,+1,+1,+3.这样的模式完成的吗?

9 个答案:

答案 0 :(得分:2)

你想要什么

以下内容在循环的每次迭代中将z中的连续项添加到q

var z = [1,1,1,1,1,5,1,1,3];

for (var q = 0, index = 0; q < 20; q = q + z[index++]) {

}

旁注

在循环结束之前,您显然会遇到问题。您的循环一直运行到q为20,但在z到达20之前,您的q数组中的项目将用尽。您的z数组中只有9个项目,这意味着您可以访问第8个索引。访问超出数组长度的索引将返回undefined。将undefined添加到q会产生NaN

q:0, index: 0
q:1, index: 1
q:2, index: 2
q:3, index: 3
q:4, index: 4
q:5, index: 5
q:10, index: 6
q:11, index: 7
q:12, index: 8
q:15, index: 9 (danger)

提早结束

根据您的实际需要,解决此问题的一种方法是更改​​循环结束逻辑,以考虑与z相比index数组的长度。如果您的z数组实际上更长,则不需要这样做。

var z = [1,1,1,1,1,5,1,1,3];

for (var q = 0, index = 0; q < 20 && index < z.length; q = q + z[index++]) {

}

答案 1 :(得分:0)

应该这样做 - 没有内循环。小心我&lt;从现在开始。

var z=[1,1,1,1,1,5,1,1,3];
for(var i = 0, j = 0; i < 20; i+=z[j++]) {
    console.log(i, j)
}

答案 2 :(得分:0)

你在寻找这样的东西吗?:

for(var q=0;q<z.length;q=q + z[q]){
   console.log("z[q] = " + z[q]);
   console.log("q =" + q);
}

答案 3 :(得分:0)

是的,你想做的事情是可能的。在for语句中,它的最后部分表示“在每次迭代结束时执行此操作”,然后在下一次迭代检查中查看条件是否仍为真。

var z=[1,1,1,1,1,5,1,1,3]

 var data1=[];;

for(var q=0;q<20;q=q+z)

你的问题在这里:q=q+zz是一个数组,而不是数字,您需要指定要添加到q的数组中的哪个值。你可以这样:

for(var q=0;q<20;q=q+z[q])this for(var q=0;q<20;q=q+z[2])但您需要指定要使用的数组中的哪个值。您可以创建一个单独的值来递增,以便数组z的索引值使用每个循环上的下一个值。

答案 4 :(得分:0)

您可以在for循环的第一个表达式中定义多个变量,然后使用它来索引z数组,如下所示:

var z=[1,1,1,1,1,5,1,1,3];

for(var q=0, i=0;q<20;q+=z[i], i++){
  console.log(q);
}

答案 5 :(得分:0)

 function irregfor(func){   
   var total=0;
  while(total<20){total=[1,1,1,1,1,5,1,1,3].reduce((index,inc)=>{func(index+=inc);return index;},total)}
}

像这样使用:

irregfor(function(index){
  console.log(index);
});

http://jsbin.com/vakutonave/edit?console

答案 6 :(得分:0)

您可以使用其他变量作为数组的索引。

通过递增索引变量,您可以使用余数运算符来保持索引小于z的长度。

&#13;
&#13;
var z = [1, 1, 1, 1, 1, 5, 1, 1, 3],
    data = [];

for (var i = 0, q = 0; q < 30; q += z[i], i = (i + 1) % z.length) {
    console.log(i, z[i], q);
    data.push(q);
}
console.log(data);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 7 :(得分:0)

如果只增加代码中的一个变量,这将有效...

var count=0;
function irregIncre(val){
    var arr = [1,1,1,1,1,5,1,1,3];
    if(count >= arr.length){ count = count % arr.length; }
    return val + arr[count++];
}
var num = 0;
num = irregIncre(num); //many times you wish...

要增加更多变量,我会使用标识符

var countA=[];
function irregIncreM(val, id){
    countA[id] = countA[id] ? countA[id] : 0;
    var arr = [1,1,1,1,1,5,1,1,3];
    if(countA[id] >= arr.length){ countA[id] = countA[id] % arr.length; }
    return val + arr[countA[id]++];
}
var num1 = 0;
var num2 = 0;
num1 = irregIncre(num1, 'num1'); //many times you wish...
num2 = irregIncre(num2, 'num2'); //many other times you wish...

Link to JsBin

答案 8 :(得分:-1)

像这样的东西。使用计数器变量来增加Z的值。

var z=[1,1,1,1,1,5,1,1,3]

var data1=[1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19, 20, 21, 22, 23, 24, 35];;

var i = 0;
var zincrement = z[i];

for(var q=0;q<20;q=q+zincrement){
console.log(data1[q]);
i++;
zincrement = z[i];
}