[英]how to multiply and adding two dimensional arrays
我有二維數組格式的字符串值變量。
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]
。
請任何人都可以幫助我。
謝謝
您在每個循環上遞增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;
如果您執行第一個,則不再需要循環內的增量。
我寫過這個算法,我相信可能對你有幫助。
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;
});
循環也會增加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;
};
}
嘗試這個:
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);
}
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);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.