2012-11-02 94 views
-1

使用Flash Builder 4.6我想排序arrayCollection。該數組有2個屬性狀態和help_id。我想對數組進行排序,使其在頂部具有所有「打開」狀態,而不是全部「讀取」,而不是「現場」,而不是「完成」等等。我做了一個這樣做的函數,但我希望所有具有相同狀態的項目都不要按help_id屬性最高的第一個最低的最後一個進行排序。使用比較功能排序ArrayCollection

這是我的代碼排序狀態。

[Bindable]protected var myHelp:ArrayCollection = new ArrayCollection(); 

排序功能:

function sortFunction(a:Object, b:Object, array:Array = null):int 
       { 

        var status:Array = ["open", "read", "onsite","complete", "reopen", "closed"]; 
        var aStatus:Number = status.indexOf(a.status); 
        var bStatus:Number = status.indexOf(b.status); 
        if(aStatus == -1 || bStatus == -1) 
         throw new Error("Invalid value for criticality "); 
        if(aStatus == bStatus) 
         return 0; 
        if(aStatus > bStatus) 
         return 1; 
        return -1; 
       } 
       var sort:Sort = new Sort(); 
       sort.compareFunction = sortFunction; 
       myHelp.sort = sort; 
       myHelp.refresh(); 

任何幫助,將不勝感激。

+0

如果您能告訴我們您的問題是什麼;以及爲什麼您的方法無法正常工作,我們會更適合幫助您解決問題。 – JeffryHouser

+0

我告訴你的作品完美。我只想對相同的狀態進行第二次排序。如果有2個狀態關閉,我希望首先顯示具有較高help_id的那個(myHelp arrarCollection有兩個狀態,myHelp.status(string)和myHelp.help_id(int)。 – user1535213

回答

0

而不是在數組中尋找字符串索引,爲什麼不使用兩個整數。在你的代碼,你可以參考像StatusType.OPEN等常量......那麼你的代碼可能是這樣的:

var sort:Sort = new Sort(); 
sort.fields = [new SortField("status", true, true), new SortField("help_id", true, true)]; 
myHelp.sort = sort; 
myHelp.refresh(); 

這將通過狀態進行排序,然後在同一時間help_id。然後,當需要在GUI中向用戶顯示狀態時,將int轉換爲字符串可讀值