以下代码工作正常但我被要求在以下代码中找到错误。任何人都可以指出。
function defaultMatrix(size) {
var defaultValue = 0;
var row = [];
var matrix = [];
for (var i=0; i < size; i++) { row.push(defaultValue); }
for (var i=0; i < size; i++) { matrix.push(row); }
return matrix;
}
console.log(defaultMatrix(6));
答案 0 :(得分:0)
我认为JS中的错误是数组引用的对象。因此,在您的情况下,您只创建一次矩阵。然后你将它推入行中。
因此,在这种情况下,如果您执行的代码如下:
let arr = defaultMatrix(2);
arr[0][0] = 1;
显示arr [1] [0]和arr [2] [0],值为&#34; 1&#34;因为所有arr [n]上的数组都是相同的。
要解决此问题,您必须在每一行中创建一个新数组。要解决您的代码,您只需要更改1行:
for (var i=0; i < size; i++) { matrix.push(row.slice()); }
slice创建当前数组的副本。
但是您可以在一行中完成所有操作,例如:
function defaultMatrix(size, defaultValue = 0) {
return Array(size).fill(0).map(() => {return Array(size).fill(defaultValue)});
}
答案 1 :(得分:-1)
您正在添加相同行的大小倍,最终大小*大小。
function defaultMatrix(size) {
var defaultValue = 0;
var rows = [];
var matrix = [];
for (var i=0; i < size; i++) {
// create row
rows[i] = [];
// create cells
for (var j=0; j < size; j++) {
rows[i].push(defaultValue);
}
// add row to matrix
matrix.push(rows[i]);
}
return matrix;
}
console.log(defaultMatrix(6));
如果你想每次用0初始化矩阵,那么你可以进一步简化这样的脚本:
function defaultMatrix(size) {
var matrix = [];
for (var i=0; i < size; i++) {
matrix.push(new Array(size));
}
return matrix;
}
console.log(defaultMatrix(6));