2012-02-15 2 views
0

след (suallar); - Написано 2 раз 1-й раз - ЗДЕСЬ ЭТО ПОКАЗЫВАЕТ ВСЕ ЭЛЕМЕНТЫ МАССИВА suallar 2-й раз - НО ЗДЕСЬ ЭТОТ МАЛОЕ, ЧТОБЫ БЫТЬ ПОРОЖНО, ДАЖЕ, ЧТО МЫ НЕ МАНИПУЛИРОВАЛИ С ЭТОГО ИЛИ СДЕЛАЕМ ЭТО РАВНО НИЧЕГО Я МАНИПУЛЯЦИИ С в промежутках междуМассив - 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

согласно документации Array.splice():

Добавляет элементы и удаляет элементы из массива. Этот метод изменяет массив без создания копии.

Когда вы number_array.splice() в середине вашего цикла, вы изменяете исходные массивы вы подтолкнули к suallar.

Посмотрите на Array.slice(), который возвращает новый массив без изменения оригинала.

+0

ОК, он удаляет элементы из number_array и толкает final_array. но как это влияет на массив суалларов? – user1212216

+0

suallar - это «массив» объектов Array. Он содержит только ссылки на объекты Array, а не на фактические числа. Когда вы захватываете объект Array из 'suallar', не копируя его, затем изменяйте его, используя операцию на месте, например' splice() ', это будет отражено в исходном массиве' suallar' (потому что 'Array' вы взятое из 'suallar' - это то же самое * часть памяти, которую вы модифицируете с помощью' splice'). – lunixbochs

+0

Правильно! Но, я написал - var cavablar_temp: Array = suallar.concat(); - и манипулировать массивом cavablar_temp после этой точки :), но все тот же. – user1212216

Смежные вопросы