Просмотр полной версии : 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)
delete arr[0];удаляет значение элемента в массиве, а не сам элемент
при удалении всеравно остается ячейка, которая выдается как undefined :(
Еще раз прочитайте 3-ый пост и обратите внимание на сочетание ЗНАЧЕНИЕ ЭЛЕМЕНТА.
А после 3-го прочитай 2-ой и сделай необходимые изменения.
Но длина-то остается неизменной ! мне нужно чтобы она сокращалясь !
Но длина-то остается неизменной ! мне нужно чтобы она сокращалясь !Вы не на том свое внимание зациклили. Я вам объяснил почему у вас delete не работает. А решение вам еще во втором посте дали, а Денис повторное внимание на это в 6-ом посте обратил. Будьте более внимательны.
все, понял :) а если одну ячейку удалять, то будет просто arr.splice(1,1) ?
все, понял :) а если одну ячейку удалять, то будет просто arr.splice(1,1) ?
А почему бы не попробывать посмотреть что получится?:)
Поди всё действо в цикле производится(?)... Я тоже давным-давно задавал подобный вопрос - как удалить элемент массива в цикле(суть - мувики-кнопки в цикле, при нажатии на какой нить - он должен удаляться из массива, который(массив) содержит ссылки на эти мувы-кнопки. Мувик удаляется, ссылка на мувик из массива удаляется, Но место из под ссылки остается...) Вразумительных(действенных) методов не прозвучало... Я её решил по другому... И splice в цикле не пашет(в MX по крайней мере)... Точнее он удаляет объект, но место из под него остается... Когда трейсишь массив, то получалось вида - mov1, mov2,mov3,,mov5,mov6,mov7... и т.п. mov4 удалился, но место из под него оставалось. Пользовался splice, проверял на тип содержимого, что бы не нужный затем удалить, но толлку было мало... Хотя нашел обходной и более простой путь для моей поставленной задачи...
2 sem1313: в это к чему написали?
К тому, что объект из массива удаляется, но место из под него остается(length() - та же самая до удаления, и после). Это случается, или случалость в MX2004, именно в цикле for...
З.Ы. Сорри, если я не правильно понял вопрос автора топика...
Где автор топика?(!)...
Разьясните конкретные обстаятельства... данного (судебного) дела...
З.Ы. Предположения по поводу цикла for возникли именно потому, что splice в ентом цикле не "совсем корректно" работает...
З.Ы.Ы. Если splice используется без каких либо циклов, то значит, что то автор путает, не то делает, есче какие нить эпитеты...
sem1313, не надо шум поднимать, если у вас возникла проблема, создайте топик, выложите туда исходник и мы его обсудим.
iNils, я давным-давно разобрался с "этой" проблемой, но косвенно, и по моему, очень легко, и быстро.
Я не требую и не прошу помощи...
Я эту траблу решил совсем по другому, без использования циклов.
А почему я здесь ответил, то это потому, что встречался с такой же ситуевиной, её прямо не решил, но поступил по другому(без массивов), и в общем то считаю, что поступил лучше...
Ну в принципе суть вопроса не решена...(хотя мне это не суть важно)...
Суть в том, что у вас была другая проблема, не имеющая отношения к данному топику.
length представляет не количество элементов в массиве, а индекс следующего за крайним.
length представляет не количество элементов в массиве, а индекс следующего за крайним.Официально это длина массива (ассоциативные элементы не в счет)
Угу, только этого самого "следующего за крайним" и нету.
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
Официально это длина массива (ассоциативные элементы не в счет)
Да, что некоторых путает.
Для хеша в принципе логичнее владеть количеством реальных элементов, а не "длиной списка числовых индексов". Полагаю, скидка была на специфичность Array.
Угу, только этого самого "следующего за крайним" и нету.
Ибо есть ещё нулевой элемент.
...
Чтобы быть в курсе всех "реальных" детишек хеша во флеше, нужно или строго следить за индексами, или учитывать их самому. Вариаций на тему много. Иногда можно и не учитывать вовсе -- из первого сообщения топика не ясно, в чём роль length. Может быть, for-in проканал бы.
Кстати, splice, насколько мне помнится, весьма медленная операция.
Автор, опиши полную задачу.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.