使用compareFunction对ArrayCollection进行排序

时间:2012-11-02 18:49:36

标签: actionscript-3 flex sorting flash-builder arraycollection

使用Flash Builder 4.6我想对arrayCollection进行排序。该数组有2个属性状态和help_id。我希望对数组进行排序,使所有“开放”状态位于顶部,而不是“读取”,而不是“现场”,而不是“完整”,依此类推。我做了一个这样做的功能,但我想要所有具有相同状态的项目,而不是按help_id属性最高的第一个最低最后一个排序。

这是我对代码进行排序的代码。

    [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();

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

而不是在数组中查找字符串索引,为什么不为两者使用int。在你的代码中,你可以引用像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转换为String可读值