Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Разбиение и совмещение массивов (http://www.flasher.ru/forum/showthread.php?t=196630)

pomuс 27.03.2013 23:29

Разбиение и совмещение массивов
 
Добрый вечер.

Что то я совсем запутался в методе splice. ситуация такая: Есть 6 элементов в массиве. Каждый по отдельности анимируется и в какой то момент 1 элемент уходит из ряда. Идет смещение всех элементов что находятся справа, а далее тот элемент который пропал появляется в конце ряда справа.
С этой частью никаких проблем, но вот далее мне необходимо обновить последовательность этих элементов, чтобы в массиве они стояли также как слева направо после перестановки.
Как я понимаю, это делается через splice

Код AS3:

var ran:int = randomRange(4, 0);
                        ballArr[ran].hide();
                        TweenLite.to(ballArr[ran], 0, { overwrite:false, delay:2, x:posArr[5]} )
 
                        for (var i:int = ran + 1; i < ballArr.length; i++) {
                                TweenLite.to(ballArr[i], 1, {x:posArr[i - 1]});
                        }
                        // тут все в порядке, все встает на нужные места
//далее делим массив ballArr
                        var splicedAlone:Array = ballArr.splice(ran, 1)//тот что пропадает
                        var spliced:Array = ballArr.splice(ran + 1, ballArr.length)//те что были справа от изчезнущего
 
                        trace ("ballArr "+ballArr +"dlina "+ballArr.length); //ballArr [object Ball]dlina 1
                        trace ("alone "+splicedAlone+"dlina "+splicedAlone.length)//alone [object Ball]dlina 1
                        trace ("ostatok " + spliced + "dlina " + spliced.length); //ostatok [object Ball],[object Ball],[object Ball],[object Ball]dlina 4
                        ballArr.splice(ballArr.length-1, 0, spliced); // пытаюсь добавить те что были справа
                        ballArr.splice(ballArr.length-1, 0, splicedAlone)//тот что изчезал
 
                        trace ("ballArr "+ballArr +"dlina "+ballArr.length); // ballArr [object Ball],[object Ball],[object Ball],[object Ball],[object Ball],[object Ball],[object Ball],[object Ball],[object Ball]dlina 3
                        trace ("alone "+splicedAlone+"dlina "+splicedAlone.length); //alone [object Ball]dlina 1
                        trace ("ostatok " + spliced + "dlina " + spliced.length);//ostatok [object Ball],[object Ball],[object Ball],[object Ball]dlina 4

Трейс показан при ran = 1;
Кстати даже если получилось бы соединить 2 массива, колличество элементов не было бы нужным мне. Их по прежнему должно быть 6, но если например разрезали на 3 х 1 х 2, то новый массив будет из 5 элементов 3+1+1. Как мне решить эту задачку?

Добавлено через 37 минут
Вопрос решил таким способом
Код AS3:

       for (var h:int = 0; h < spliced.length; h++) {
                                ballArr.splice(-1, 0, spliced[h]);
                        }
                        ballArr.splice( -1, 0, splicedAlone[0]);


caseyryan 28.03.2013 07:48

Что-то ничего не понял из вопроса. Но так, к теме, есть еще и другие методы
Код AS3:

var a:Array = [1, 2, 3, 4]; // 1,2,3,4
trace(a);
// сносим второй элемент и добавляем его в конец
a.push(a.splice(1, 1)); // 1,3,4,2
trace(a);


pomuс 28.03.2013 11:07

caseyryan а если обрезаешь не 1 элемент, а 3 например, то как добавить их в нужном порядке каждый элемент?

Hauts 28.03.2013 11:11

pomuс, иногда помогает проявлять самостоятельность и настойчивость в решениях задач.

Код AS3:

var a:Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 1,2,3,4,5,6,7,8,9,10
trace(a);
// сносим три элемента начиная со второго и добавляем их в конец
a.push(a.splice(1, 3)); // 1,5,6,7,8,9,10,2,3,4
trace(a);

Я ведь правильно понял про нужный порядок добавления? Если нет, то можно так:
Код AS3:

var a:Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 1,2,3,4,5,6,7,8,9,10
trace(a);
// сносим три элемента начиная со второго и добавляем их в конец в обратном порядке
a.push(a.splice(1, 3).reverse()); // 1,5,6,7,8,9,10,4,3,2
trace(a);


pomuс 28.03.2013 11:15

Hauts
прошу прощения, меня запутал пример со справки, где сплайсом добавлялся отделенный массив с элементами.. и там элементы терялись поэтому приходилось изощоенным способом добавлять по одному

Добавлено через 20 минут
Да, вот она и тут эта проблема. array.length показывает меньшее количество чел в трейсе самих элементов. А надо чтобы было столько же

Добавлено через 1 час 41 минуту
Если кому то пригодится- я нашел метод создания отдельный массивов методом splice и потом методом concat объединял их

caseyryan 28.03.2013 14:52

Смысл в этом? Есть еще метод slice


Часовой пояс GMT +4, время: 13:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.