Javascript - манипулирование значениями в многомерном массиве во время итерации - PullRequest
1 голос
/ 08 ноября 2019

Мне дана матрица, и для каждого индекса, который имеет значение 0, я должен сделать индекс прямо под ним также равным 0.

for(let i = 0; i < matrix.length; i++) {
    for(let j = 0; j < matrix[i].length;j++) {
        //figure out what rooms not 0
        if(matrix[i][j] !== 0) {
            goodRooms.push(matrix[i][j])             
        } else {
            matrix[i + 1][j] = 0;
        }
    }
}

Я продолжаю получать

TypeError: Cannot set property '0' of undefined

В заявлении else, и я не уверен, почему.

1 Ответ

1 голос
/ 08 ноября 2019

Измените else на

else if(i < matrix.length - 1)

В противном случае, если вы находитесь в последней строке, а значение равно 0, вы получите доступ к следующей строке, которая не существует.

Окончательный код должен выглядеть следующим образом:

for(let i = 0; i < matrix.length; i++) {
    for(let j = 0; j < matrix[i].length; j++) {
        if(matrix[i][j] !== 0) {
            goodRooms.push(matrix[i][j]);
        } else if(i < matrix.length - 1) {
            matrix[i + 1][j] = 0;
        }
    }
}

Примечание: Это изменит следующую строку до того, как цикл достигнет этой строки. Таким образом, если первая строка содержит значение 0, вторая строка будет изменена до того, как цикл получит к ней доступ, и, таким образом, когда цикл достигнет ее, значение будет уже равно 0, и поэтому весь столбец будет рекурсивно установлен на 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...