Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   удаление элемента из массива (http://www.flasher.ru/forum/showthread.php?t=33731)

andr_sky 28.06.2002 20:32

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

т.е. есть массив ["a", "b", "c"]
надо удалить "c"

я тут сделал проц-ру простым перебором,
но если массив будет большой, то на её выполнение
потребуется какое то время, что неприемлимо совсем,
потому что я её буду часто использовать

Код:

function dfa(d) {
        l = _root.ej.length;
        r = 0;
        for (j=0; j<l; j++) {
                if (_root.ej[j-r] == d) {
                        _root.ej.splice(j-r, 1);
                        r++;
                }
        }
}

как можно сделать проще??

DeliMIter 28.06.2002 21:21

Array.splice(elementIndex, 1);

andr_sky 28.06.2002 22:29

Цитата:

Оригинал написал(а) DeliMIter
Array.splice(elementIndex, 1);
я вроеде писал что неизвестен порядковый номер
элемента, который нужно удалить....
известен лишь сам этот элемент......

так что?
никак кроме как так ?



(в первом сообщении, где CODE дан,
удаление производится из массива _root.ej
... это если кто не понял)

DeliMIter 28.06.2002 22:44

Код:

for (var i=Array.length-1; i>=0; i--)
 if (Array[i] == something)
  Array.splice(i, 1);


Nox Noctis 28.06.2002 22:46

а хэш (ассоциативный массив другими словами) вместо простого массива сделать нельзя ?
тогда бы и вопрос сам собой отпал...

andr_sky 29.06.2002 20:11

не будет ли так любезен Nox Noctis объяснить
что ж это за хрень такая "хэш" .....

Nox Noctis 29.06.2002 20:53

во флэше хеш - это самая банальная вещь :) ты сам им постоянно пользуешься когда проги на АС пишешь :)
когда ты делаешь обращение вроде: this["something"] - это как раз и есть обращение к ассоциативному массиву, где имена всех методов и пропертей являются ключами.

так я к чему все это -
ты можешь переписать массив задом наперед ?
есть у тебя, скажем, массив вроде:
a = [10,20,30,40];
а ты его перепишешь как
a = [];
a["i10"] = ...;
// в качестве значения такого элемента поставишь то, что тебе нужно...
// а если не нужно можно просто true поставить например :)
a["i20"] = ...;
a["i30"] = ...;
a["i40"] = ...;
вообще, это не будет отличаться от работы с объектами ;)
хочешь удалить элемент со значением N - пишешь
delete a["i"+N];
...это например

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

короче тебе надо понять что тебе больше нужно:
моментально находить элемент по его значению, или по его порядковому номеру в массиве.

andr_sky 01.07.2002 09:52

однако эта штука "хэш" очень полезная.
только вот почему она так называется....

но всё равно мне хэш этот не поможет,
элементы массива совершенно разные типа
"е1", "е2", "е_1", "е3", "mе_1" и тп....
а мне их ещё надо всех перебирать по прядку для проверки всяких там штук....

так что надо обычный Array использовать....

Fisher 01.07.2002 19:29

А эти твои элементы не имена мувов часом? Та мож в масиве не имена хранить а сами объекты(тобиш ссылки)? Короче не мудри - если хочешь чтоб помогли - объясняй всю задачу. Но без перебора я думаю врядли обойтись. Не хочешь лишней работы - поставь при выполнении условия ретурн

Nox Noctis 01.07.2002 21:01

а вообще можно сделать гибрид массива и гусеничного трактора :)
...правда как этого добиться без дублирования структуры, мне пока не понятно :)

но вообще, если элементов не очень много, то можно сделать и хэш и обычный массив... только тогда нужно написать функции, которые их синхронизируют...


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

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