Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   delete Array[0] (http://www.flasher.ru/forum/showthread.php?t=82559)

lalala2 15.07.2006 19:30

delete Array[0]
 
ребят, мучаюсь с одной гидрой... - есть массив, при каком-то событии я внего добавляю элемент
Код:

arr.push("pex")
, а при еще каком-то событии определенный элемент массива удаляется
Код:

delete arr[0]
.

проблема: при повоторном пересчете выдается та же самая длина, что и до удаления элемента !!! как с этим справиться ?

UrbanMan 15.07.2006 20:37

Код:

arr.splice(i, 1)
где "i" это число обозначающая какой элемент массива нужно удалить, 1 это число удаляемых элементов.

В твоём случае
Код:

arr.splice(0, 1)

iNils 15.07.2006 21:42

Код:

delete arr[0];
удаляет значение элемента в массиве, а не сам элемент

lalala2 15.07.2006 22:35

при удалении всеравно остается ячейка, которая выдается как undefined :(

iNils 15.07.2006 22:38

Еще раз прочитайте 3-ый пост и обратите внимание на сочетание ЗНАЧЕНИЕ ЭЛЕМЕНТА.

etc 15.07.2006 22:49

А после 3-го прочитай 2-ой и сделай необходимые изменения.

lalala2 15.07.2006 23:25

Но длина-то остается неизменной ! мне нужно чтобы она сокращалясь !

iNils 15.07.2006 23:32

Цитата:

Сообщение от lalala2
Но длина-то остается неизменной ! мне нужно чтобы она сокращалясь !

Вы не на том свое внимание зациклили. Я вам объяснил почему у вас delete не работает. А решение вам еще во втором посте дали, а Денис повторное внимание на это в 6-ом посте обратил. Будьте более внимательны.

lalala2 16.07.2006 00:17

все, понял :) а если одну ячейку удалять, то будет просто arr.splice(1,1) ?

iNils 16.07.2006 00:26

Цитата:

Сообщение от lalala2
все, понял :) а если одну ячейку удалять, то будет просто arr.splice(1,1) ?

А почему бы не попробывать посмотреть что получится?:)

sem1313 16.07.2006 01:31

Поди всё действо в цикле производится(?)... Я тоже давным-давно задавал подобный вопрос - как удалить элемент массива в цикле(суть - мувики-кнопки в цикле, при нажатии на какой нить - он должен удаляться из массива, который(массив) содержит ссылки на эти мувы-кнопки. Мувик удаляется, ссылка на мувик из массива удаляется, Но место из под ссылки остается...) Вразумительных(действенных) методов не прозвучало... Я её решил по другому... И splice в цикле не пашет(в MX по крайней мере)... Точнее он удаляет объект, но место из под него остается... Когда трейсишь массив, то получалось вида - mov1, mov2,mov3,,mov5,mov6,mov7... и т.п. mov4 удалился, но место из под него оставалось. Пользовался splice, проверял на тип содержимого, что бы не нужный затем удалить, но толлку было мало... Хотя нашел обходной и более простой путь для моей поставленной задачи...

iNils 16.07.2006 01:46

2 sem1313: в это к чему написали?

sem1313 16.07.2006 01:59

К тому, что объект из массива удаляется, но место из под него остается(length() - та же самая до удаления, и после). Это случается, или случалость в MX2004, именно в цикле for...

З.Ы. Сорри, если я не правильно понял вопрос автора топика...

iNils 16.07.2006 02:04

Цикл тут не причем.

sem1313 16.07.2006 02:32

Где автор топика?(!)...
Разьясните конкретные обстаятельства... данного (судебного) дела...

З.Ы. Предположения по поводу цикла for возникли именно потому, что splice в ентом цикле не "совсем корректно" работает...
З.Ы.Ы. Если splice используется без каких либо циклов, то значит, что то автор путает, не то делает, есче какие нить эпитеты...

iNils 16.07.2006 02:58

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

sem1313 16.07.2006 03:38

iNils, я давным-давно разобрался с "этой" проблемой, но косвенно, и по моему, очень легко, и быстро.

Я не требую и не прошу помощи...

Я эту траблу решил совсем по другому, без использования циклов.

А почему я здесь ответил, то это потому, что встречался с такой же ситуевиной, её прямо не решил, но поступил по другому(без массивов), и в общем то считаю, что поступил лучше...

Ну в принципе суть вопроса не решена...(хотя мне это не суть важно)...

iNils 16.07.2006 04:25

Суть в том, что у вас была другая проблема, не имеющая отношения к данному топику.

mort 17.07.2006 14:34

length представляет не количество элементов в массиве, а индекс следующего за крайним.

iNils 17.07.2006 14:47

Цитата:

Сообщение от mort
length представляет не количество элементов в массиве, а индекс следующего за крайним.

Официально это длина массива (ассоциативные элементы не в счет)

etc 17.07.2006 14:49

Угу, только этого самого "следующего за крайним" и нету.

sem1313,
Код:

anyArray = [1,2,3,4,5,6,7];
while (anyArray.length) {
  anyArray.splice(0,1);
}
trace(anyArray.length); // 0

Вот и всё удалилось.
Или:
Код:

anyArray = [1,2,3,4,5,6,7];
for (var i = 0;i<anyArray.length;i++) {
        anyArray.splice(i--,1);       
}
trace(anyArray.length); // 0


mort 17.07.2006 17:26

Цитата:

Сообщение от iNils
Официально это длина массива (ассоциативные элементы не в счет)

Да, что некоторых путает.
Для хеша в принципе логичнее владеть количеством реальных элементов, а не "длиной списка числовых индексов". Полагаю, скидка была на специфичность Array.

Цитата:

Сообщение от __etc
Угу, только этого самого "следующего за крайним" и нету.

Ибо есть ещё нулевой элемент.

...
Чтобы быть в курсе всех "реальных" детишек хеша во флеше, нужно или строго следить за индексами, или учитывать их самому. Вариаций на тему много. Иногда можно и не учитывать вовсе -- из первого сообщения топика не ясно, в чём роль length. Может быть, for-in проканал бы.

mort 17.07.2006 17:27

Кстати, splice, насколько мне помнится, весьма медленная операция.

Автор, опиши полную задачу.


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

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