【问题标题】:Unexpected value change in 2D array in JavaScriptJavaScript中二维数组中的意外值变化
【发布时间】:2013-08-15 16:09:00
【问题描述】:

我正在尝试修改二维数组中的一个值。但是,根据数组的构造方式,我发现了一些奇怪的行为。

matrix 和 matrix2 之间的唯一区别是它们的构造方式。但是,当我更改 [1][1] 值时,matrix2 中的所有 [x][1] 值都会更改:

矩阵:

[ [ 0, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 0 ] ]

Matrix2(意外):

[ [ 0, 1, 0 ], [ 0, 1, 0 ], [ 0, 1, 0 ] ]

代码:

var row = [0,0,0];
var matrix = [[0,0,0],[0,0,0],[0,0,0]];
var matrix2 = [row, row, row];
console.log(matrix);
console.log(matrix2);
matrix[1][1] = 1;
matrix2[1][1] = 1;
console.log(matrix);
console.log(matrix2);

谁能解释这是怎么回事?

【问题讨论】:

  • matrix2 有三个元素,每个元素都指向 same 数组。简单测试:matrix2[0] === matrix2[1] 结果为true
  • 好的。感谢您的帮助!

标签: javascript arrays


【解决方案1】:
[row, row, row]

您刚刚创建了一个包含三个对相同内部数组的引用的数组。

可以通过对内部数组的任何引用看到对内部数组的更改。

您想要创建内部数组的三个副本。
你可以通过调用.slice()来创建一个数组的浅拷贝。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多