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.
这样的模式完成的吗?
答案 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+z
。 z
是一个数组,而不是数字,您需要指定要添加到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);
});
答案 6 :(得分:0)
您可以使用其他变量作为数组的索引。
通过递增索引变量,您可以使用余数运算符来保持索引小于z
的长度。
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;
答案 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...
答案 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];
}