2

次のコードがある場合:

<html>
    <body>
        <script type="text/javascript">
            var mycars = new Array();
            mycars[0] = "Saab";
            mycars[1] = "Volvo";
            mycars[2] = "BMW";

            var x = 1;

            document.write("Value of x: " + x + "<br /><br />");

            for (x in mycars)
            {
                document.write(x + ": " + mycars[x] + "<br />");
            }

            document.write("<br />Value of x: " + x + "<br />");
            document.write("Number of cars: " + mycars.length);
        </script>
    </body>
</html>

出力が得られます:

Value of x: 1

0: Saab
1: Volvo
2: BMW

Value of x: 2
Number of cars: 3

for-in ループを for ループに変更せずに、最初の要素 ("Saab") が表示されないようにする方法はありますか? 出力を次のようにしたいと思います。

Value of x: 1

1: Volvo
2: BMW

Value of x: 2
Number of cars: 3
4

3 に答える 3

4

for..inループを使用して配列をループしないでください。for..inオブジェクトをループする場合にのみ使用します。そうしないと、意図しない結果が生じる可能性があり、不可解に思える場合があります。

標準forループを使用します。

for (var i = 0; i < mycars.length; i++)
{
    document.write(i + ": " + mycars[i] + "<br />");
}

最初のアイテムを逃したい場合は、 ではなく、initialに設定iします。おそらくコメントを入れておくべきでしょう。そうすれば、このコードに戻ってきたときに何が起こっているかがわかります。10

于 2011-01-09T09:10:33.307 に答える
3

とにかく配列を通過するために for..in ループを使用しないでください。MDCから:

「また、反復の順序は任意であるため、配列を反復しても、要素が番号順にアクセスされない場合があります。」

したがって、「最初の」要素をスキップできないだけでなく、最初の要素が一貫していることに頼ることさえできません!

于 2011-01-09T09:10:25.260 に答える
-1

あなたが望むものを正確に達成するには、そのようなコードを用意してください:

var x = 1;
document.write("Value of x: " + x + "<br /><br />");
while (x < mycars.length) {
{
    document.write(x + ": " + mycars[x] + "<br />");
    x++;
}
x--;

document.write("<br />Value of x: " + x + "<br />");
document.write("Number of cars: " + mycars.length);
于 2011-01-09T09:14:43.577 に答える