Измените 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.