我尝试使用此Sort:
对arrayCollection进行排序 private function sortArray(questions:ArrayCollection):void
{
questions.sort = new Sort();
questions.sort.fields = [new SortField("rank")];
questions.sort.compareFunction = rankFunction;
questions.refresh();
}
private function rankFunction(a:int, b:int, array:Array = null):int
{
if(a == b)
{
return 0;
}
if(a>b)
{
return 1;
}
else
{
return -1;
}
}
有23个对象,所有都具有rank = 0
我预计什么都不会改变但是在刷新之后,ArrayCollection的位置0和11处的项目交换了它们的位置。
在rankFunction中,总是返回0。
谁能告诉我这里出了什么问题?
答案 0 :(得分:1)
比较函数的ASDoc says应具有以下签名:
function [name](a:Object, b:Object, fields:Array = null):int
并且fields
数组指定了对象字段。
因此Sort 不会为您提取字段值。你应该自己做。
关于您的问题,似乎AS3隐式地将Objects
转换为ints
来调用rankFunction
。如果是这样,items
被某些内部代码比较,这些内部代码以某种方式对应于项目创建的顺序。