2016-11-22 59 views
4

所以我创建了这个代码二维数组二维数组:我需要一个值添加到我创建

var grid:Array = [ 
[1, 1, 1, 1], 
[1, 1, 1, 1], 
[1, 1, 1, 1], 
[1, 1, 1, 1] 
] 

而且我有一个按钮,(理论上)将值拼接到每一行,因此在宽度方面扩大了电网。然而,这个问题似乎并没有在我的代码中扩大,而是将垂直增加和水平增加结合在一起。

下面是当前的代码,我尝试使用了高度增加:

var insertTo:int = 1; 

var temp:Array = grid[0]; 

grid.splice(1, 0, temp); 

下面是当前代码我试图使用宽度增加:

for (var i:int = 0; i < grid.length; i++){ 

    var insertTo:int = 1; 

    grid[i].splice(insertTo, 0, 1); 

} 

而且目前点击高度按钮后出现意想不到的结果,然后是宽度按钮(我有遍历的痕迹):

After height increase: 
1,1,1,1 
1,1,1,1 
1,1,1,1 
1,1,1,1 
1,1,1,1 

After width increase: 
1,1,1,1,1,1 
1,1,1,1,1,1 
1,1,1,1,1 
1,1,1,1,1 
1,1,1,1,1 

而这里的反向做同样的后预期的结果:

After width increase: 
1,1,1,1,1 
1,1,1,1,1 
1,1,1,1,1 
1,1,1,1,1 

After height increase: 
1,1,1,1,1 
1,1,1,1,1 
1,1,1,1,1 
1,1,1,1,1 
1,1,1,1,1 

为什么它的工作的一种方式,而不是另一个,以及如何解决这个问题?

+0

为什么你不使用'push'来代替拼接? –

回答

2

必须克隆阵列befor将它作为一个新的值

Array类具有复制数组的没有内置的方法。 您可以通过调用不带参数的 concat()或slice()方法来创建数组的浅表副本。在浅拷贝中,如果 原始数组的元素是对象,则只复制对象的引用 而不是对象本身。副本 指向与原始相同的对象。对这两个对象所做的任何更改都反映在两个数组中。

var insertTo:int = 1; 

var temp:Array = grid[0].concat(); // clone 

grid.splice(1, 0, temp); 
+0

非常感谢!现在工作100%。大的帮助。 – Eraeo

相关问题