Вот мой код для участия в конкурсе «Лестница» на Hackerrank:
function staircase(n) {
// fill() fills out `undefined` items, which helps to initiate new n*n matrix
let matrix = Array(n).fill().map(() => Array(n).fill());
matrix.forEach((curArr, idY) => {
curArr.forEach((curVal, idX) => {
curVal = (idX + idY + 1 >= n) ? '#' : ' ';
process.stdout.write(curVal);
}, [])
console.log();
}, []);
}
Когда я тестировал с staircase(6)
, я получил ожидаемый результат:
#
##
###
####
#####
######
Однако, когда я изменяю код для проверки matrix
следующим образом:
function staircase(n) {
// fill() fills out `undefined` items, which helps to initiate new n*n matrix
let matrix = Array(n).fill().map(() => Array(n).fill());
matrix.forEach((curArr, idY) => {
curArr.forEach((curVal, idX) => {
curVal = (idX + idY + 1 >= n) ? '#' : ' ';
}, [])
}, []);
console.log(matrix);
}
Вот что я получаю:
[ [ undefined, undefined, undefined, undefined, undefined, undefined ],
[ undefined, undefined, undefined, undefined, undefined, undefined ],
[ undefined, undefined, undefined, undefined, undefined, undefined ],
[ undefined, undefined, undefined, undefined, undefined, undefined ],
[ undefined, undefined, undefined, undefined, undefined, undefined ],
[ undefined, undefined, undefined, undefined, undefined, undefined ] ]
Итак, мои вопросы:
- Почему
matrix
не изменяется? - Существуют ли чисто функциональные способы решения этой проблемы (т. Е. С использованием только
map()
?)