Javascript Loop / Array / Variable question - PullRequest
0 голосов
/ 11 июня 2010

Я пытаюсь заставить это работать, и я надеюсь, что это не слишком расплывчато.Крис

var example = new Array();

var test1 = "one";
var test2 = "two";
var test3 = "three";

for (v = 1; v <= 3; v++) {
    alert(example[test + v])
}

Я хочу, чтобы в сообщении говорилось:

один
два
три

1 Ответ

1 голос
/ 11 июня 2010

Ваш массив example нигде не инициализирован. Должно быть так:

var example = new Array();
example[1] = "one";
example[2] = "two";
example[3] = "three";

for (v = 1; v <= 3; v++) {
    alert(example[v]);
}

Это создаст три отдельных предупреждения, которые говорят «один», затем «два», затем «три». Если вы хотите одно предупреждение с надписью «один два три», вы должны сделать:

var example = new Array();
example[1] = "one";
example[2] = "two";
example[3] = "three";

var output = "";

for (v = 1; v <= 3; v++) {
    output += " " + example[v];
}

alert(output);

В ответ на запрос Криса о последующей деятельности:

В этом случае вы можете вкладывать циклы, но было бы намного эффективнее сгенерировать выходную строку один раз, а затем выполнить цикл для ее отображения. Пример:

var output = "";
// This variable just makes it happen 3 times, it no longer corresponds to the array size
for (numAlerts = 1; numAlerts  <= 3; numAlerts ++) {

    // This is the actual index for the array
    for (v = 1; v <= example.length; v++) {
        output += " " + example[v];
    }
    alert(output);

    // Clean out the string or it will keep concatenating
    output = "";
}

Этот пример имеет вычислительную стоимость n ^ 2 (технически m x n ), потому что вы вкладываете циклы. Чтобы сделать 3 оповещения, каждое с объединением 3 элементов массива, потребуется 9 значительных операций. Следующий пример:

var output = "";
// This variable is once more for array size
for (v = 1; v <= example.length; v++) {
    output += " " + example[v];
}

// This variable controls how many times the alert is printed
for (numAlerts = 1; numAlerts <= 3; numAlerts++) {    
    alert(output);
}

Это вычислительная стоимость 2n , уменьшенная до n . В нашем примере происходит 6 значимых действий, 3 для объединения строки и еще 3 для ее печати. 6 <9, но не намного. Однако представьте, что у вас есть 300 пунктов в списке, и вы хотите напечатать его 1000 раз. Ну а теперь 1300 << 300000. </p>

Последнее замечание: в большинстве языков массивы начинаются с нуля, поэтому было бы example[0], [1], [2], etc. Я понимаю, что вы соответствовали example[1] = "one", но это приведет к путанице в циклах, если вы начнете с 1. Стандартный for цикл для массива:

var example = ["zero", "one", "two", "three"];
for (i = 0; i < example.length; i++) {
    action(example[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...