我需要一个值添加到我创建
问题描述:
所以我创建了这个代码二维数组二维数组:我需要一个值添加到我创建
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
为什么它的工作的一种方式,而不是另一个,以及如何解决这个问题?
答
必须克隆阵列befor将它作为一个新的值
Array类具有复制数组的没有内置的方法。 您可以通过调用不带参数的 concat()或slice()方法来创建数组的浅表副本。在浅拷贝中,如果 原始数组的元素是对象,则只复制对象的引用 而不是对象本身。副本 指向与原始相同的对象。对这两个对象所做的任何更改都反映在两个数组中。
var insertTo:int = 1;
var temp:Array = grid[0].concat(); // clone
grid.splice(1, 0, temp);
+0
非常感谢!现在工作100%。大的帮助。 – Eraeo
为什么你不使用'push'来代替拼接? –