0

配列の配列から空の配列に1つの配列を削除しています

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 に答える