为什么这个2d数组会产生意想不到的结果?

时间:2016-08-25 16:52:59

标签: javascript arrays benchmarking

在下面的代码中,我希望生成一个二维数组,预先填充零。我得到的问题是x[0][3] = 2似乎发生得太快,所以在控制台登录函数时,数组已经有了更改的值。即使有超时,我也无法解决这个问题。发生了什么事?

function test(size) {
    var row = [];
    var return_me = [];
    for (var i=0; i < size; i++) { row.push(0); }
    for (var j=0; j < size; j++) { return_me.push(row.slice()); }
    console.log("1:");
    console.log(return_me);
    return return_me;
}

var x = null;
console.log("0:");
console.log(x);
x = test(5);
console.log("2:");
console.log(x);
x[0][3] = 2;
console.log("3:");
console.log(x);

意外结果出现在&#34; 1:&#34;在输出中,我得到:

0: 0
1: 0
2: 0
3: 2
4: 0

1 个答案:

答案 0 :(得分:2)

由于数组是一个对象,您将看到实际(最新)的值,因为 console.log()显示对象的引用,当您打开它时,该值已经改变。

选项是使用console.dir()打印对象的当前状态(尽管console.dir()不适用于chrome)。

如果要获取chrome中的实际值,请打印一个值,而不是整个对象。
您可以查看this post以获取扩展说明和更多信息。