我列出了几种创建嵌套数组和向子数组添加值的方法:
方式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]]
?
答案 0 :(得分:1)
以第三种方式,您通过引用将arrs
的每个元素分配给同一个数组:subArr
。没有复制,arrs
中的所有三个项都指向内存中的相同值。
当然,当你推到arrs[0]
时,你就会推到subArr
。重复3次,然后您将获得正在经历的结果。
答案 1 :(得分:1)
因为它是同一个对象!
如果你做了
arrs[i] = [];
你会得到不同的结果!您每次都要分配一个新数组,而不是对一个数组的引用。
这是一个容易陷入任何编程语言的陷阱。