1

我有二维数组格式的字符串值变量。

 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]

请任何人都可以帮助我。

谢谢

4

5 回答 5

3

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;

如果您执行第一个,则不再需要循环内的增量。

于 2013-11-09T19:20:24.350 回答
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; 
});
于 2013-11-09T19:23:57.013 回答
0
  1. 将由循环jindex递增。这将意味着每个循环增加 3。jindex

  2. jindex考虑is的情况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;
      };
  }

http://jsfiddle.net/Bwx2g/

于 2013-11-09T19:20:42.257 回答
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);
}
于 2013-11-09T19:28:27.573 回答
0

内部 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);
};
于 2013-11-09T19:29:47.840 回答