2012-02-15 4 views
0

トレース(suallar); - 2回書かれています 初めて - ここではすべての要素が表示されていますsuyar 2回目 - これは私が操作したり操作していなかったものの、このアレーが空であると見えますArray.splice()ドキュメントを1として配列がNULLであるか、わからないか

var suallar:Array = new Array(); 
var i:int; 
var cavablar:Array=new Array(); 

suallar.push(["sual1", "duz1", "sehv11", "sevh12", "sevh13","sevh14"]); 
suallar.push(["sual2", "duz2", "sehv21", "sevh22","sevh23","sevh24" ]); 
suallar.push(["sual3", "duz3", "sehv31", "sevh32","sevh33","sevh34"]); 
suallar.push(["sual4", "duz4", "sehv41", "sevh42","sevh43","sevh44"]); 
suallar.push(["sual5", "duz5", "sehv51", "sevh52","sevh53","sevh54"]); 



var cavablar_temp:Array = suallar.concat(); 

for (i=0; i<suallar.length; i++){ 
    cavablar_temp[i].shift(); 
} 

trace (suallar); 


for (i=0; i<suallar.length;i++){ 

var number_array:Array = cavablar_temp[i]; 

var final_array:Array = []; 

var count_selected:int = 5; 
for (var u = 0; u < count_selected; u++) 
{ 
    if (number_array.length == 0) 
    { 
     break; 
    } 
    else 
    { 
     final_array.push(number_array.splice(Math.floor(Math.random() * number_array.length), 1)[0]); 

    } 

} 
    cavablar.push(final_array);} 

trace(cavablar.join("\n")); 

trace (suallar); 

答えて

0

の間に:

に要素を追加して、配列から要素を削除します。このメソッドは、コピーを作成せずに配列を変更します。

ループの途中でnumber_array.splice()を実行すると、元の配列がsuallarに変更されます。

Array.slice()をご覧ください。これは、元の配列を変更せずに新しい配列を返します。

+0

これは、number_arrayから要素を削除し、final_arrayにプッシュします。それはsuallar配列にどのように影響しますか? – user1212216

+0

suallarは 'Array'オブジェクトの' Array'です。 'Array'オブジェクトへの参照のみを含み、実際の数は含みません。コピーしないで 'suallar'から' Array'オブジェクトをつかんで 'splice()'のようなインプレース操作で修正すると、元の 'suallar'配列に反映されます'suallar'は' splice'で修正しているものと全く同じ*メモリです)。 – lunixbochs

+0

そうですよ!しかし、私は書いた - var cavablar_temp:Array = suallar.concat(); - そして、その時点の後にcavablar_temp配列で操作します:)でも同じです。 – user1212216

関連する問題