所以我用这段代码创建了一个2D数组:
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 :(得分:2)
你必须克隆数组,因为它要把它作为新值插入
Array类没有用于制作数组副本的内置方法。 您可以通过调用它来创建数组的浅表副本 不带参数的concat()或slice()方法。在浅层副本中,如果 原始数组包含的元素是对象,只有引用 复制对象而不是对象本身。副本 指向与原始对象相同的对象。任何改变 对象反映在两个数组中。
var insertTo:int = 1;
var temp:Array = grid[0].concat(); // clone
grid.splice(1, 0, temp);