Указание начального значения `x` в циклах for (x in object)` - PullRequest
2 голосов
/ 09 января 2011

Если у меня есть следующий код:

<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

Ответы [ 3 ]

4 голосов
/ 09 января 2011

Не используйте циклы for..in для обхода массивов.Используйте for..in только для циклического прохождения объектов.В противном случае могут возникнуть непредвиденные последствия, которые могут показаться непонятными.

Используйте стандартный цикл for:

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

Если вы хотите пропустить первый элемент, установите i1 изначально, а не 0.Вам, вероятно, следует добавить комментарий, чтобы вы знали, что происходит, если когда-нибудь вернетесь к этому фрагменту кода.

3 голосов
/ 09 января 2011

В любом случае вы не должны использовать циклы for..in для обхода массивов.From MDC :

"Кроме того, поскольку порядок итераций является произвольным, итерации по массиву могут не посещать элементы в числовом порядке."

Таким образом, вы не только не можете пропустить «первый» элемент, вы даже не можете полагаться на то, что первый элемент является последовательным!

0 голосов
/ 09 января 2011

Чтобы добиться именно того, что вы хотите, используйте такой код:

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