将拼接数组推入数组会给我留下三倍的嵌套数组

时间:2012-10-19 02:10:28

标签: actionscript-3

我从一个数组数组中删除一个数组到一个空数组

var _open:Array = [[x, y]];
var _closed:Array = [];

_closed.push(_open.splice(0, 1));

让我的数组_closed为:

[[[x, y]]]

有谁知道为什么?因为如果我在没有使用拼接功能的情况下推送东西,我会得到我所期望的,没有额外的嵌套。例如:

_closed.push([8,13]);
// _closed is [[8,13]]

顺便说一下,在AS3中跟踪(主要是数组)会变得很烦人,所以我使用这个函数来知道数组中是否有一些嵌套:

public static function traceArray(aArray:Array):void
{
    for (var t:Object in aArray) {
        trace(t + " : " + aArray[t]);
        if (typeof(aArray[t]) == "object") {
            traceArray(aArray[t]);
        }
    }
    trace();
}

1 个答案:

答案 0 :(得分:1)

是的,如果你查看docs,你可以看到Array.splice返回一个数组,而不是数组的元素(即使拼接只有长度为1)。

这可以做你想要的,虽然可能不是你想要的解决方案:

_closed.push(_open.splice(0, 1)[0]);

更适合您需求的是使用

_closed.push(_open.shift())

_closed.push(_open.pop())

取决于您是否希望第一个或最后一个元素_open具有多个元素。虽然名字是_open和_closed,但我猜你需要从_open中的任意位置拉出一个元素(一旦它被关闭)......为此,你应该选择第一个解决方案。