2013-11-09 23 views
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

你遞增在每次循環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; 

如果你做的第一個,你不再需要廁所內的增量頁。

+0

真的感謝。 – user2873816

0
  1. jindex將由環路遞增爲好。這意味着jindex每個循環增加3。

  2. 考慮jindexarrayList[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/

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; 
}); 
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); 
} 
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); 
};