Я выполнял некоторые учебные задания для своего курса JS, и у меня есть такая, где вы должны реализовать функцию, которая принимает положительное целое число (n) и возвращает матрицу, подобную приведенной ниже (5 было пройдено):
[ [ 1, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 0, 1, 0, 0 ],
[ 0, 0, 0, 1, 0 ],
[ 0, 0, 0, 0, 1 ] ]
Мне удалось реализовать функцию с помощью следующего кода:
function getIdentityMatrix(n) {
const mat = new Array(n).fill([]);
return mat.map((row, index) => {
row = new Array(n).fill(0);
row[index] = 1;
return row;
});
}
Но при этом я обнаружил странное поведение, которое не могу объяснить ... Если я немного изменю код:
function getIdentityMatrix(n) {
const mat = new Array(n).fill(new Array(n).fill(0));
return mat.map((row, index) => {
row[index] = 1;
return row;
});
}
Возвращает матрицу, подобную этой:
[ [ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ] ]
Почему это так работает?Это похоже на то, что функция forEach выполняет итерацию по всем элементам, вложенным в каждую строку, чего не следует делать.
Спасибо за любые советы!