Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
Javascript ';推动';元素到嵌套数组中的子数组_Javascript_Arrays - Fatal编程技术网

Javascript ';推动';元素到嵌套数组中的子数组

Javascript ';推动';元素到嵌套数组中的子数组,javascript,arrays,Javascript,Arrays,我列出了几种创建嵌套数组并为子数组添加值的方法: 方法一:有效 然后,毫不奇怪,arrs被更新: [[1],[2],[3]] 方式2:工作 方式三: var arrs = []; var subArr = []; for (var i = 0; i < 3; i++) { arrs[i] = subArr; } arrs[0].push(1); arrs[1].push(2); arrs[2].push(3); 我的问题是:为什么方法3导致arrs结果是[[1,2,3],[1

我列出了几种创建嵌套数组并为子数组添加值的方法:

方法一:有效

然后,毫不奇怪,
arrs
被更新:

[[1],[2],[3]]
方式2:工作

方式三:

var arrs = [];
var subArr = [];
for (var i = 0; i < 3; i++) {
   arrs[i] = subArr;
 }

arrs[0].push(1);
arrs[1].push(2);
arrs[2].push(3);

我的问题是:为什么方法3导致
arrs
结果是
[[1,2,3],[1,2,3],[1,2,3]
而不是
[[1],[2],[3]

在第三种方法中,您通过引用将
arrs
的每个元素分配给同一数组:
subar
。没有复制,arrs中的所有三项都指向内存中的相同值


当然,当您按到
arrs[0]
时,您就是在按
subar
。重复3次,然后得到您正在体验的结果。

在第三种方法中,您通过引用将
arrs
的每个元素分配给同一数组:
subar
。没有复制,arrs中的所有三项都指向内存中的相同值


当然,当您按到
arrs[0]
时,您就是在按
subar
。重复3次,你就会得到你正在经历的结果。

因为它是同一个对象

如果是的话

arrs[i] = [];
你会得到不同的结果!您应该每次分配一个新数组,而不是对一个数组的引用


这在任何编程语言中都很容易落入陷阱。

因为它是同一个对象

如果是的话

arrs[i] = [];
你会得到不同的结果!您应该每次分配一个新数组,而不是对一个数组的引用


这在任何编程语言中都是一个容易陷入的陷阱。

它采用相同的对象引用。有趣的是,您对
subar
进行了三次更改,相同的更改对象由
arr
数组中的三个对象引用。。。只是说它采用相同的对象引用。有趣的观察,您对
subar
进行了三次更改,相同的更改对象由
arr
数组中的三个对象引用。。。说的没错。我的第一个编程语言是Python(在Python中赋值传递变量值而不是引用)。我没有意识到那个问题。谢谢。是的,不同的语言有自己的方式。Python也是一种很棒的语言,它很好地处理了所有这些不同的处理方式,很有趣!确切地我的第一个编程语言是Python(在Python中赋值传递变量值而不是引用)。我没有意识到那个问题。谢谢。是的,不同的语言有自己的方式。Python也是一种很棒的语言,它很好地处理了所有这些不同的处理方式,很有趣!
var arrs = [];
var subArr = [];
for (var i = 0; i < 3; i++) {
   arrs[i] = subArr;
 }

arrs[0].push(1);
arrs[1].push(2);
arrs[2].push(3);
[[1,2,3],[1,2,3],[1,2,3]]
arrs[i] = [];