0

请检查我的编码:

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

每次跟踪时,返回 item[0][0] 减 1,我只想使用 curlist 作为临时数组来计算基于 item[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

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

4

3 回答 3

1

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

要进行复制,您可以使用.slice()

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

如果不传递任何参数,则新数组是原始数组的副本(浅克隆)。

于 2013-05-21T10:27:28.113 回答
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() 来复制带有原语的数组。如果您有一个带有数组的数组。复制子数组,并将它们放入一个空数组中。如果您有孩子数组的孩子等等,请进行递归。

于 2013-05-21T10:22:02.237 回答
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 - 克隆对象

于 2013-05-21T10:29:10.560 回答