2017-01-13 16 views
3

我想推二维空阵列中的一些元素,我发现推方法有问题。推新方法与新阵列

var a = [[],[],[]]; 
a[1].push(1); 
console.log(a); 
//result: [ [], [ 1 ], [] ] 

上面的代码会得到正确的结果,但是如果我使用新的Array方法,push方法总是推送到所有的索引。我有做错了吗?

var a = new Array(3).fill([]); 
// a = [[], [], []] 
a[1].push(1); 
console.log(a); 
//result: [ [ 1 ], [ 1 ], [ 1 ] ], 
//but I think it should be [ [], [ 1 ], [] ] if I only push 1 to a[1] 
+0

你在等什么结果? – cesare

回答

4

第一个片段创建3个不同的子阵列并将它们存储在aa[0],a[1],a[2]。当您修改a[1]时,a[0]a[2]不受影响。

第二个片段创建1个子数组并将其存储在a 3次,a[1],a[2]。当您修改a[1]时,a[0]a[2]也被修改,因为它们都保持相同的阵列。

+0

我明白了,非常感谢。 –

0

像这样使用,fill()将您的值放入数组中的每个索引中。要按需要使用它,您应该尝试fill(value, start, end),其中start是您想要用值填充的第一个索引,end是最后一个。

0

这是正确的。根据docs:fill()方法使用静态值填充所有元素。

+0

但这里的问题是一旦填充被使用,他应该被允许改变个别元素 –