0

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

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();
}
4

1 回答 1

1

是的,如果您查看文档,您会看到它Array.splice返回一个数组,而不是数组的元素(即使拼接的长度仅为 1)。

这将做你想要的,虽然可能不是你所追求的解决方案:

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

更适合您需求的是使用

_closed.push(_open.shift())

或者

_closed.push(_open.pop())

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

于 2012-10-19T02:19:43.790 回答