0

以下のコードは、配列インデックスを次のインデックスと比較し、前のインデックスが小さい場合は「yay」を出力することを目的としています。for ループが各インデックスを参照していて、ループする前に「次の」インデックスを変数に格納しようとしているという点で、私が間違っていることを理解していると思います。これをどのように解決するのか興味があります。私はそれをググることができましたが、私はむしろ人々がここで思いついたものを見たいと思っています. そのほうが勉強になると思います。

list = [1,2,3,4,5,6,7,8,9];

for(i=0; i<list.length; i++) {
    var small = list[i];
    var large = list[i++];
    if(small<large) {
     document.write("yay");


    }

}
4

3 に答える 3

1

私は code-play.com でこれを非常に高速に試しましたが、デバッグの最初のステップは、変数の実際の値が何であるかを確認することです。この目的で console.log() を使用しましたが、正確なコードを使用すると、次のようになります。

small: 1
large: 1

small: 3
large: 3

small: 5
large: 5

small: 7
large: 7

small: 9
large: 9

これにより、ここで何が起こっているかについての最初の手がかりが得られるはずです。ご覧のとおり、毎回値が同じであり、反復ごとに桁をスキップしています。ここで JavaScript 演算子がどのように機能するかを見ると、これが理にかなっていることがわかります。

この行を置き換える場合:

var large = list[i++];

この行で:

var large = list[i+1];

あなたの問題は修正されるはずです。++1 も機能しないことに注意してください。その場合、次の出力が得られます。

small: 1
large: 2
yay
small: 3
large: 4
yay
small: 5
large: 6
yay
small: 7
large: 8
yay
small: 9
large: undefined

次に、リストの長さを超えてiをインクリメントしないように値を確認するだけです(これが、最後の反復で大きなものが未定義になる原因です)が、自分でそれを理解させます.教育目的のため:)

于 2013-01-26T12:30:58.457 に答える
1

list[i++] を実行すると、i の値がインクリメントされます。forステートメントで再度インクリメントしています。list[i+1] に large を割り当てるか、for ループのインクリメント部分を削除してください。

于 2013-01-26T12:09:51.287 に答える
0

このように動作するはずです

l = [1,2,3];
for (i = 0; i l.lenght -1; ++i) {
  if (l[i] < l[i+1]) {
    console.log("meh");
  }
}
于 2013-01-26T12:11:33.973 に答える