'推'嵌套数组中子数组的元素

时间:2018-02-03 21:25:16

标签: javascript arrays

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

方式1:有效!

// Create empty nested array:    
var arrs = [[],[],[]];
arrs[0].push(1);
arrs[1].push(2);
arrs[2].push(3);

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

[[1],[2],[3]]

方式2:有效!

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

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

arrs

 [[1],[2],[3]]

方式3:?

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

arrs

[[1,2,3],[1,2,3],[1,2,3]]

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

2 个答案:

答案 0 :(得分:1)

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

当然,当你推到arrs[0]时,你就会推到subArr。重复3次,然后您将获得正在经历的结果。

答案 1 :(得分:1)

因为它是同一个对象!

如果你做了

arrs[i] = [];

你会得到不同的结果!您每次都要分配一个新数组,而不是对一个数组的引用。

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