下面的代码运行良好,但我被要求在下面的代码中发现一个错误。有人能指出吗。
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));
我认为JS中的错误是数组是被引用的对象。因此,在您的情况下,您只创建一次矩阵。你把它按成一排。
因此,在这种情况下,如果您执行以下代码:
let arr = defaultMatrix(2);
arr[0][0] = 1;
如果显示arr[1][0]和arr[2][0],则值为"1",因为所有arr[n]上的数组都相同。
对于求解,必须在每行中创建一个新数组。为了解决您的代码,您只需要更改1行:
for (var i=0; i < size; i++) { matrix.push(row.slice()); }
切片创建当前数组的副本。
但你可以在一行中完成这一切,就像这样:
function defaultMatrix(size, defaultValue = 0) {
return Array(size).fill(0).map(() => {return Array(size).fill(defaultValue)});
}
您将大小乘以同一行,结果是大小*size大。
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));