Flex Arraycollection排序

利用ArrayCollection的sort属性
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">  
  3.      <mx:Script>  
  4.          <![CDATA[  
  5.             import mx.collections.SortField;  
  6.             import mx.collections.Sort;  
  7.             import mx.collections.ArrayCollection;  
  8.             private var acSort:ArrayCollection=  
  9.             newArrayCollection([{id:0,userName:"zhangSan",age:21},  
  10.                                  {id:2,userName:"liSi",age:24},  
  11.                                  {id:1,userName:"wangWu",age:31}]);  
  12.               
  13.               
  14.             private function sortAc():ArrayCollection{  
  15.                  var sort:Sort=new Sort();  
  16.                 //按照ID升序排序  
  17.                  sort.fields=[new SortField("id")];  
  18.                   
  19.                 //按照userName降序排序  
  20.                  sort.fields=[new SortField("userName",true,true)];  
  21.                   
  22.                 //先按ID升序,再按userName降序  
  23.                  sort.fields[new SortField("id"),new SortField("userName",true,true)];  
  24.                  acSort.sort=sort;  
  25.                  acSort.refresh();//更新  
  26.                 return acSort;  
  27.              }  
  28.               
  29.            
  30.          ]]>  
  31.      </mx:Script>  
  32. </mx:Application> 

 

 

 

 

 

 

因为数组可被多个SortFields 排序,Sort 对象的fields 属性就是一个数组。这些sort 创建一
个层级的结构,所有对象进行分组排序,先根据field 属性里的第一个SortField 对象,再第
一个,以此类推。这个例子代码先根据regions 再states 对集合进行排序:

 

coll = new ArrayCollection{[{city:"Cleveland", state:"Ohio", region:"East"},{city:"Sacramento", state:"California", region:"West"},{city:"Atlanta",state:"Georgia", region:"South"},{city:"Columbus", state:"Ohio", region:"East"}]);
var sort:Sort = new Sort();
sort.fields = [new SortField("region"), new SortField("state")];
coll.sort = sort;
coll.refresh();

 

 

对集合的日期类型数据进行排序,使用mx.utils.ObjectUtil 类的dateCompare 方法比较日期。

ObjectUtil 类提供一个dateCompare 方法用于检测两个Date 对象哪个更早。你可以用
ObjectUtil.dateCompare 方法来比较两个日期的大小。dateCompare 方法返回1, 0, 或
-1:如果值为null 或相等返回0,如果第一个值为null 或小于第二个值返回1,如果第二个值
为null 或小于第一个值返回-1:

 

import mx.collections.Sort; 
import mx.collections.ArrayCollection; 
import mx.utils.ObjectUtil; 
private function sortFunction(a:Object, b:Object, fields:Array = null):int 
  var tempDateA:Date = new Date(Date.parse(a.dob)); 
  var tempDateB:Date = new Date(Date.parse(b.dob)); 
  return ObjectUtil.dateCompare(tempDateA, tempDateB); 
private var arrColl:ArrayCollection; private function init():void 
  arrColl = new ArrayCollection([{name:"Josh",dob:"08/17/1983"},{name:"John",dob:"07/30/1946"},{name:"John",   dob:"07/30/1990"},{name:"John",dob:"07/30/1986"}]); 
  var sort:Sort = new Sort(); 
  sort.compareFunction = sortFunction; 
  arrColl.sort = sort; 
  arrColl.refresh(); 
  trace(arrColl);
 }

你可能感兴趣的:(Date,object,function,Flex,null,application)