我正在为我的 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 函数迭代每行中嵌套的所有元素,但它不应该这样做。
谢谢您的任何建议!