我正在编写一个函数,它应该创建一个预先填充零的二维数组。我的输出看起来是正确的,但显然有一个我没有看到的错误。有人知道它是什么吗?我没有看到它。
function createMatrix(size) {
var defValue = 0;
var row = [];
var matrix = [];
for (var i = 0; i < size; i++) {
row.push(defValue);
}
for (var i = 0; i < size; i++) {
matrix.push(row);
}
return matrix;
}
答案 0 :(得分:9)
您每次都将同一row
推送到数组matrix
。这些都指向同一个数组,因为它们是通过引用传递的。
您应该为每一行创建一个新数组:
function createMatrix(size){
var defValue = 0;
var matrix = [];
for (var i = 0; i < size; i++) {
var row = [];
for (var j = 0; j < size; j++) {
row.push(defValue);
}
matrix.push(row);
}
return matrix;
}
答案 1 :(得分:1)
问题在于第二个循环;
如果您停止并跟踪代码,您可以看到您只创建了一个&#34; row&#34;数组,而你最有可能想要制作大小的行数。
您的代码应该看起来像这样
var matrix = [];
for(var i = 0; i < size; i++) {
//temp row to append to array
var row = [];
//fill row array with 0s
for (var j = 0; j < size; j++) {
row.push(0);
}
//append row to the matrix
matrix.push(row);
}
return matrix
这样你就可以在每次迭代结束时推送一个完整的行。