我有二维数组格式的字符串值变量。
var arrayList=[["1","2"],["6","3600","11","60"],["1","2","3","4","5","6"]];
我想要的是,每个奇数位置值乘以下一个偶数位置并最终添加该值
等。
["1","2"]=(1*2);
["6","3600","11","60"]=((6*3600)+(11*60));
["1","2","3","4","5","6"]=((1*2)+(3*4)+(5*6))
为此我写了下面的代码,第二和第三种情况都不起作用。
真的很遗憾可能是这是一个非常基本的问题,但我测试了每一行似乎代码是正确的但在第二和第三种情况下获得Nan
。
var result=[];
for (var index = 0; index < arrayList.length; index++) {
var innerResult=0;
for (var jndex = 0; jndex < arrayList[index].length; jndex++) {
var cali=parseInt(arrayList[index][jndex])*parseInt(arrayList[index][jndex+1]);
innerResult=innerResult+cali;
jndex=jndex+2;
};
result.push(innerResult);
};
result
我这样[3,Nan,Nan]
。
请任何人帮助我。
由于
答案 0 :(得分:4)
您在每个循环上递增jndex
,然后在该循环结束时再添加2个。你有两个选择,改变这个:
for (var jndex = 0; jndex < arrayList[index].length; jndex++) {
为:
for (var jndex = 0; jndex < arrayList[index].length; jndex+=2 ) {
或者这个:
jndex=jndex+2;
为:
jndex=jndex+1;
如果您执行第一个,则不再需要循环内的增量。
答案 1 :(得分:1)
我写过这个算法,我认为可以帮到你。
var array = [["1","2"],["6","3600","11","60"],["1","2","3","4","5","6"]];
array.map(function(subArray){
var total = 0;
for(var i = 1; i < subArray.length; i += 2)
total += parseInt(subArray[i], 10) * parseInt(subArray[i - 1], 10);
return total;
});
答案 2 :(得分:0)
jindex
也将通过循环递增。这意味着每个循环jindex
增加3。
考虑jindex
为arrayList[index].length - 1
的情况;当您parseInt(arrayList[index][jndex+1])
时,您将到达数组边界之外,并获得undefined
(而parseInt(undefined)
再次为NaN
。
如果您修复了这些问题,您应该会发现代码有效;
var result = [];
for (var index = 0; index < arrayList.length; index++) {
var innerResult = 0;
for (var jndex = 0; jndex < arrayList[index].length - 1; jndex++) {
var cali = parseInt(arrayList[index][jndex]) * parseInt(arrayList[index][jndex + 1]);
innerResult = innerResult + cali;
jndex = jndex + 1;
};
}
答案 3 :(得分:0)
试试这个:
var result = [];
for (var index = 0; index < arrayList.length; index++) {
var innerResult = 0;
for (var jndex = 0; jndex < arrayList[index].length;) {
var cali = (parseInt(arrayList[index][jndex]) * parseInt(arrayList[index][jndex + 1]));
innerResult = innerResult + cali;
jndex = jndex + 2;
}
result.push(innerResult);
}
答案 4 :(得分:0)
Inner for循环更改为while循环(for循环中有双倍增量):
var result = [];
for (var index = 0; index < arrayList.length; index++) {
var innerResult = 0;
var j = 0;
while (j < arrayList[index].length) {
var cali = parseInt(arrayList[index][j]) * parseInt(arrayList[index][j + 1]);
innerResult = innerResult + cali;
j += 2;
}
result.push(innerResult);
};