Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
2D数组在JavaScript中产生意外结果_Javascript_Arrays - Fatal编程技术网

2D数组在JavaScript中产生意外结果

2D数组在JavaScript中产生意外结果,javascript,arrays,Javascript,Arrays,如果我在JavaScript中创建一个2D数组,并尝试分配一个特定的对象,那么它会改变所有内容。这是我的密码: var a = [0,1]; var b = []; b.push(a); b.push(a); b[0][0]=5; alert(b[1][0]); 现在我希望得到0,但我得到5。如何修复此问题?您正在推送的数组是引用,因此两个索引的值都引用a(引用a),这就是为什么任何索引的更改都会反映在指向相同引用的所有其他索引上,您需要添加值,您可以看到我用于创建数组副本的值 b.push(

如果我在JavaScript中创建一个2D数组,并尝试分配一个特定的对象,那么它会改变所有内容。这是我的密码:

var a = [0,1];
var b = [];
b.push(a);
b.push(a);
b[0][0]=5;
alert(b[1][0]);

现在我希望得到
0
,但我得到
5
。如何修复此问题?

您正在推送的数组是引用,因此两个索引的值都引用
a
(引用a),这就是为什么任何索引的更改都会反映在指向相同引用的所有其他索引上,您需要添加值,您可以看到我用于创建数组副本的值

b.push([...a]);
var a=[0,1];
var b=[];
b、 推(a);
b、 推动([…a]);
b[0][0]=5;

控制台日志(b)推送相同的对象引用。通过更改一个值,所有引用都会显示更改后的值。相反,您可以通过获取

var a=[0,1];
var b=[];
b、 推(a.切片());
b、 推(a.切片());
b[0][0]=5;
console.log(b[1][0]);
控制台日志(b)通过调用
b.push(a)
两次,可以将同一数组
a
分配给
b
的第一个和第二个索引。因此,如果编辑
a
的元素,则它将反映在同一实例的所有引用中

您可以执行
a
的深度复制以防止出现这种情况

例如:

b.push(a.slice());
b.push(a.slice());