1

2 次元配列形式の文字列値を持つ変数があります。

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

このために、次のコードを書きました.2番目と3番目のケースは機能しません。

本当に申し訳ありませんが、それは非常に基本的な質問かもしれませんが、コードが正しいように見えるすべての行をテストしましたが、2番目と3番目のケースでは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 つ追加しています。これを変更する 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

これを試して:

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 に答える
0
  1. もループによってjindexインクリメントされます。これは、ループごとに が 3 ずつ増加することを意味します。jindex

  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/

于 2013-11-09T19:20:42.257 に答える