AS3 Объектная фильтрация - PullRequest
       13

AS3 Объектная фильтрация

0 голосов
/ 04 августа 2009

Хорошо. поэтому я работаю над приложением, которое извлекает элементы из БД и строит галерею. Я делал это много раз, и это должно быть просто.

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

Мой вопрос: Как, черт возьми, я могу удалить свойство из объекта, не оставляя объект того же размера? Я использую функцию count () для генерации данных разбивки на страницы, поэтому я не могу просто 'обнулить' их, и, насколько я понимаю, delete () тоже не вариант.

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

Итак, в отчаянии я использую приращение для добавления объектов к новому объекту с помощью индекса (goodItemsObject [index] = allItemsObject [object]), но это кажется действительно ужасным способом решения этой проблемы.

Вот код:

var filteredMO = new Object();
var newFile = 0;
for each(var file in mediaObject){
if(check_file(file)){
    filteredMO[newFile] = file;
    newFile++;
}
}
mediaObject = filteredMO;

check_file () просто возвращает true или false, mediaObject полностью заполнен объектами.

Я бы предпочел сделать это:

for each(var file in mediaObject){
    if(check_file(file)){
         //remove_from_object_for_reals(mediaObject[file]);
    }
}

Я понимаю, что это могло бы быть невозможно (это исключило бы цикл for?), Но что-то подобное было бы мило. Мне бы хотелось, чтобы gc мог захватить все эти бесполезные объекты.

есть идеи?

спасибо,

Джесси

1 Ответ

0 голосов
/ 06 августа 2009

То, что вы сейчас используете для хранения вашего объекта, называется ассоциативным массивом. Вы не можете удалить ключ-значение из ассоциативного массива. Вам нужен словарь (в котором у as3 есть встроенный http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/Dictionary.html).

import flash.utils.Dictionary;

var dict:Dictionary = new Dictionary();

тогда вы можете удалить ключ из своего словаря, набрав

delete dict["myKey"]
...