AS3 Splice(:ed)并希望“重新编制索引”?

时间:2012-09-28 19:04:48

标签: arrays actionscript-3 splice

好的,所以我有一个像这样的数组。

myArray:Array []

myArray.push(Object) // x 4. 

我的数组中有4个对象。然后我拼接第二个。给我一个看起来像这样的数组。 1,3,4。现在......我希望这个数组看起来像这样:1,2,3。我想3& 4把简单的开关放到一个较少的位置。

我知道这是可能的,几年前我有一个朋友为我做这件事。我该怎么做呢?

3 个答案:

答案 0 :(得分:2)

我认为你在使用拼接时失败了。 splice和slice是不同的方法,数组切片不会更改原始数组但返回带有切片间隙的新数组

示例

var arr:Array = ["Cat","Dog", "Mouse", "Cow"];
trace(arr.slice(1,3));// output : Dog,Mouse
trace(arr.slice(2));//output: Mouse,Cow
trace(arr) //output: Cat,Dog,Mouse,Cow

所以当你打电话给arr [3]时你会得到Cow但你的阵列根本没有改变

splice修改原始数组

var arr:Array = ["Cat","Dog", "Mouse", "Cow"];
arr.splice(1,1); // output: 0->Cat,1->Mouse,2->Cow

答案 1 :(得分:0)

  

我想让这个数组看起来像这样:1,2,3

所以...只是pop()最后一个元素:

myArray:Array = [1, 2, 3, 4];
myArray.pop();
trace(myArray);  // Prints: 1,2,3
  

我想3& 4把简单的开关放到一个较少的位置。

嗯......这正是删除第二个元素的原因......

如果你想要的最终结果是第二个元素放在的末尾,那就是:

Before: [1, 2, 3, 4]  --> After [1, 3, 4, 2]

然后你可以分两步完成:

var spliced = myArray.splice(1, 1); // Remove the second element and return it 
myArray.push(spliced);              // Push it to the end of the array

从技术上讲,你可以一步完成,因为拼接将首先发生:

myArray.push(myArray.splice(1, 1));

答案 2 :(得分:0)

我运行了您的伪代码 - > 结果如下:

[object Cat],[object Mouse],[object Cow]

跟踪时没有索引..另一点,我有些代码

trace(arr[0] , arr[1], arr[2]);

我仍然得到

[object Cat],[object Mouse],[object Cow]

索引在AS3中自动生效。

package regression 
{
    import flash.display.Sprite;
    /**
     * ...
     * @author Arthur Wulf White
     */
    public class Check_array_index_test_1 extends Sprite
    {

        public function Check_array_index_test_1() 
        {
            var arr: Array = new Array();
            arr.push(new Cat, new Dog, new Mouse, new Cow);
            trace(arr);
            arr.splice(1, 1);
            trace(arr);
                    trace(arr[0] , arr[1], arr[2]);
        }

    }

}

class Cat { }
class Dog { }
class Mouse { }
class Cow {}