Javascript数组函数有错误我看不到

时间:2015-12-15 21:16:25

标签: javascript arrays

我正在编写一个函数,它应该创建一个预先填充零的二维数组。我的输出看起来是正确的,但显然有一个我没有看到的错误。有人知道它是什么吗?我没有看到它。

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;
}

2 个答案:

答案 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

这样你就可以在每次迭代结束时推送一个完整的行。