As3 - 数组上的脚本错误

时间:2013-05-21 10:17:43

标签: actionscript-3

请检查我的编码:

function createRandomList():void
{
    var newlist:Array = [0,1,2];
    var curlist:Array = item[selectedlevel - 1] //selectedlevel = 1;
    var normal:int = curlist[0];
    var tempboo1:Boolean = false;
    var tempboo2:Boolean = false;
    var tempboo3:Boolean = false;
    while (curlist[0] + curlist[1] + curlist[2] > 0)
    {
        if (Number(curlist[0]) == 0 && tempboo1 == false)
        {
            newlist.splice(newlist.indexOf(0), 1);
            tempboo1 = true;
        }
        if (Number(curlist[1]) == 0 && tempboo2 == false)
        {
            newlist.splice(newlist.indexOf(1), 1);
            tempboo2 = true;
        }
        if (Number(curlist[2]) == 0 && tempboo3 == false)
        {
            newlist.splice(newlist.indexOf(2), 1);
            tempboo3 = true;
        }
    var temp:int = Math.floor(Math.random()*(newlist.length));
    curlist[temp] -=  1;
    generatedlist.push(Number(newlist[temp]));
        trace(item);
    }

    while (normal > 0)
    {
        var temp2:int = Math.floor(Math.random() * 3) + 1;
        generatednormal.push(Number(temp2));
        normal--;
    }
}

我的项目是[[5,0,0],[10,0,0]]; 但在成为[[0,0,0],[0,0,0]];之后

我只想将Array项重复为新变量curlist

每次跟踪时,返回项[0] [0]减1,我只想使用curlist作为临时数组来计算基于项[0]的新随机数组。

输出继电器:

4,0,0,10,0,0
3,0,0,10,0,0
2,0,0,10,0,0
1,0,0,10,0,0
0,0,0,10,0,0

他们之间是否有任何联系,还是我的问题?请帮忙!如果您需要更多信息,请评论我!

3 个答案:

答案 0 :(得分:1)

数组是通过引用传递的,而不是值。这意味着当您通过指向它的任何属性修改数组时,将修改原始数组。

要制作副本,您可以使用.slice()

  

返回一个新数组,该数组由原始数组中的一系列元素组成,而不修改原始数组。返回的数组包括startIndex元素和所有元素,但不包括endIndex元素。

     

如果您没有传递任何参数,则新数组是原始数组的重复(浅层克隆)。

答案 1 :(得分:0)

var array : Array = [ 1, 2, 3];
var array2 : Array = array.concnt();
array[ 0 ] = 4;
trace( array );// 1, 2, 3
trace( array 2);// 4, 2 ,3

因此,使用.concat()复制带有基元的数组。如果您有一个包含数组的数组。复制子数组,并将它们放入空数组中。如果你有子数组的孩子等等,那就做一些递归的事。

答案 2 :(得分:0)

如果要创建新引用,可以克隆阵列。

function clone( source:Object ):* 
{ 
    var myBA:ByteArray = new ByteArray(); 
    myBA.writeObject( source ); 
    myBA.position = 0; 
    return( myBA.readObject() ); 
} 

var a:Array = [[0,0],[1,1]];
var b:Array = clone(a);

b[0] = [2,2];

trace(a)
trace(b)

输出

0,0,1,1
2,2,1,1

它适用于任何对象,而不仅仅是数组。 更多信息:AS3 - Clone an object