PDA

Просмотр полной версии : delete Array[0]


lalala2
15.07.2006, 19:30
ребят, мучаюсь с одной гидрой... - есть массив, при каком-то событии я внего добавляю элемент 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
Но длина-то остается неизменной ! мне нужно чтобы она сокращалясь !Вы не на том свое внимание зациклили. Я вам объяснил почему у вас delete не работает. А решение вам еще во втором посте дали, а Денис повторное внимание на это в 6-ом посте обратил. Будьте более внимательны.

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

iNils
16.07.2006, 00:26
все, понял :) а если одну ячейку удалять, то будет просто 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
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
Официально это длина массива (ассоциативные элементы не в счет)

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

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

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

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

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

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