Actionscript: сборка нового массива из множества массивов

Следующая функция вводит пользовательский ввод для начального и конечного уроков выбранного пользователем диапазона, затем использует цикл для вытягивания каждого массива уроков (из массива массивов), а затем случайным образом объединяет его в новый массив. Конечным результатом для выбора уроков 3-5, например, было бы то, что новый массив (randArray) имеет все данные из каждого урока в рандомизированном диапазоне, первые три, затем четыре, затем пять. Все это прекрасно работает, но я могу себе представить, что это, вероятно, не самый эффективный способ сделать это. Каков наиболее компактный и эффективный способ создания нового массива из подмножества существующих массивов? Поскольку он работает хорошо, я доволен, но был бы увлечен изучением лучших методов и знал бы, почему они лучше (в дополнение к тому, чтобы быть более компактными). Я выбрал этот метод, потому что было уже много кода для использования только одного урока с одним массивом, и это позволяет мне добавлять ряд уроков в один массив без изменения какого-либо другого кода.

function initializeRange():void {
 for (i = startLesson; i < (endLesson + 1); i++) { 
 switch (i) {
 case 1:
 duplicate = elementArray[i].slice(0);
 while (duplicate.length > 1 ) {
 randArray.push(duplicate.splice(Math.ceil(Math.random() *
 (duplicate.length - 1)), 1)[0]);
 }
 break;
 case 2:
 duplicate = elementArray[i].slice(0);
 while (duplicate.length > 1 ) {
 randArray.push(duplicate.splice(Math.ceil(Math.random() * 
 (duplicate.length - 1)), 1)[0]);
 }
 break;
 case 3:
 duplicate = elementArray[i].slice(0);
 while (duplicate.length > 1 ) {
 randArray.push(duplicate.splice(Math.ceil(Math.random() * 
 (duplicate.length - 1)), 1)[0]);
 }
 break;
 //case "etc.":
 //and so on for the rest of the lessons 
 }
 }
 }
1 ответ

Вы можете использовать либо push.apply или concat.

Они оба делают то же самое - добавление элементов в конкретный массив, предоставление подмножества другого массива. В любом случае вы должны выбрать (splice) подмножество, которое нужно добавить.

Эти два метода лучше, потому что вам не нужно перебирать все элементы (могут быть тысячи).

licensed under cc by-sa 3.0 with attribution.