Не удается получить i из for ((i = 0; i <koniec.length; i ++) для индексации через console.log (silnia (5) [i]); - PullRequest
0 голосов
/ 31 октября 2019

В моем JS-скрипте я пытаюсь индексировать через silnia () функцию, которая возвращает массив, я могу сделать это вручную без проблем: silnia (5) [1], но когда я пытаюсь использовать iиз цикла for это не работает.

koniec = [1,2,3];

for (i = 0; i < koniec.length; i++){
    // Returns only undefined:
    console.log(silnia(5)[i]);

    // Works no problem:
    // console.log(silnia(5)[2]);
}


function silnia(n){
    var wynikSilni = [];

    for(i = 1; i < (n + 1); i++){
        wynikSilni.push(i);
    }

    return wynikSilni;    
}

Ответы [ 3 ]

1 голос
/ 31 октября 2019

Вы не используете оператор var, let или const для объявления i, поэтому он считается глобальной переменной.

Это означает то же самое, что вы используете iв silnia функция та же самая, что и в цикле for вне ее;по сути, цикл вне его выполняется один раз, силния увеличивается i до 6, и как только он возвращается к циклу for в глобальной области видимости, он останавливается, потому что i>koniec.length (ETA: Затем он пытается получить доступ к sylnia(5)[6]потому что i равно 6 в тот момент времени, который не определен)

Попробуйте это:

function silnia(n) {
    var wynikSilni = [];

    for (var i = 1; i < (n + 1); i++) {
        wynikSilni.push(i);
    }
    return wynikSilni;
}
koniec = [1, 2, 3];

for (var i = 0; i < koniec.length; i++) {
    // Returns only undefined:
    console.log(silnia(5)[i]);

    // Works no problem:
    // console.log(silnia(5)[2]);
}
0 голосов
/ 31 октября 2019

Это 2019 и В массивах есть довольно много полезных методов , которые устраняют необходимость в настройке счетчиков циклов и управлении ими, что, как отмечали другие, является источником вашей проблемы.

Array.forEach() является самым простым из них и поможет значительно упростить вашу проблему:

koniec = [1,2,3];

// Loop over the knoiec array
// .forEach requires a callback function to execute
// upon each loop iteration. That function will automatically
// be passed 3 arguments: the array item, the item index, the array
koniec.forEach(function(item, index){
    console.log(silnia(5)[index]);
});


function silnia(n){
    var wynikSilni = [];

    for(i = 1; i < (n + 1); i++){
        wynikSilni.push(i);
    }

    return wynikSilni;    
}
0 голосов
/ 31 октября 2019

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

function silnia(n) {
    var wynikSilni = [];
    for (var i = 1; i < (n + 1); i++) { // use var or let
        wynikSilni.push(i);
    }
    return wynikSilni;
}

var koniec = [1, 2, 3];

for (var i = 0; i < koniec.length; i++) { // use var or let
    console.log(silnia(5)[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...