我需要为我创建的2D数组添加一个值

时间:2016-11-22 16:35:55

标签: arrays actionscript-3 matrix

所以我用这段代码创建了一个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

为什么它以单向而非另一种方式工作,我该如何解决?

1 个答案:

答案 0 :(得分:2)

你必须克隆数组,因为它要把它作为新值插入

  

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

var insertTo:int = 1;

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

grid.splice(1, 0, temp);