0

好的。所以我正在研究一個從數據庫中檢索項目並構建一個畫廊的應用程序。我已經做了很多次,而且應該很簡單。AS3對象過濾

我遇到了問題,因爲在此庫中,我從包含圖像文件和其他文件的數據庫中獲取結果。我們只是說我不能改變任何東西,除了閃光燈,所以我需要檢測它是否是一個圖像,並且如果它是隻顯示它。

我的問題是:我該如何從對象中刪除一個屬性而不使對象保持相同的大小?我使用一個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抓住所有這些無用的物體。

有什麼想法?

感謝,

傑西

回答

0

您使用的存儲現在你的對象什麼叫做關聯數組。您無法從關聯數組中移除鍵值。你需要的是一本字典(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"] 
+0

謝謝移除你的字典的關鍵,我不知道從字典中刪除被區別對待。在一個對象上,完全相同的命令會生成一個值爲「null」的索引,並拋出count函數並用於語句。 – Jesse 2009-08-08 04:33:22