请检查我的编码:
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
他们之间是否有任何联系,还是我的问题?请帮忙!如果您需要更多信息,请评论我!
答案 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