Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   метод splice как избавится от NaN (http://www.flasher.ru/forum/showthread.php?t=191877)

sampo 08.01.2013 04:56

метод splice как избавится от NaN
 
Создаю массив,
в цикле for проверяю совпадения элементов,
если произошло совпадение(например первый элемент и второй)
то удаляю элемент методом мойМассив.splice(element1,1),
далее trace(мойМассив)
и получаю на месте "удаленного" значения NaN,
читал что данный метод удаляет элемент
но почему оставляет NaN,как можно от него избавиться?

caseyryan 08.01.2013 07:30

Никакого NaN там не остается. Просто скорее всего цикл не правльно написан.
Представьте такую ситуацию: перебираем массив циклом в сторону увеличения, и тут, по пути, сносим один элемент. Массив стал короче, все индексы "съехали" назад, а цикл продолжает перебирать его вперед. Масив заканчивается, а цикл продолжает работать. На что он наткнется?
Нужно изменять всю логику цикла.
Не видя кода этого цикла, сложно сказать, как конкретно его нужно переписать.

olexandr 08.01.2013 13:19

вместо
for (var i:int=0; i<_len; i++)
используйте
for (var i:int=_len-1; i>=0; i--)
тогда и удалять можно будет

Frost47rus 08.01.2013 15:12

Код AS3:

for (var i:int = 0; i < myArray.length; i++){
    if (myArray[i] == number){
      myArray.splice(i, 1);
    }
}


iflamberg 08.01.2013 15:37

Плюсую caseyryan и olexandr. Только логичнее и оптимальнее использовать не for уже.
Код AS3:

var a:Array = ...
var l:int = a.length;
while (l--){
    if (a[l] == number){
      a.splice(l, 1);
    }
}


ChuwY 08.01.2013 15:56

Совсем не логичнее и не вполне (не со всех точек зрения) более оптимально, а только несколько быстрее во время выполнения.

caseyryan 08.01.2013 18:35

Цитата:

Совсем не логичнее и не вполне (не со всех точек зрения) более оптимально, а только несколько быстрее во время выполнения.
После подобного высказывания неплохо бы пруф увидеть.
По-моему как раз с while в таком случае логичнее. Хотя бы потому, что запись короче. Да и компилятор все равно все for превратит в while


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

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