Repository: flex-asjs
Updated Branches:
  refs/heads/develop 7a9b582c6 -> 893f0e59e


sortOn


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/7d79ffd8
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/7d79ffd8
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/7d79ffd8

Branch: refs/heads/develop
Commit: 7d79ffd86ec9720106f0d262bbd45374405b39cf
Parents: 1149ba7
Author: matrix3d <[email protected]>
Authored: Sat May 7 16:59:58 2016 +0800
Committer: matrix3d <[email protected]>
Committed: Sat May 7 16:59:58 2016 +0800

----------------------------------------------------------------------
 .../main/flex/org/apache/flex/utils/Language.as | 59 ++++++++++++++++++++
 1 file changed, 59 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/7d79ffd8/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Language.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Language.as 
b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Language.as
index 2586e77..0bbe9db 100644
--- a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Language.as
+++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Language.as
@@ -41,6 +41,15 @@ package org.apache.flex.utils
                //   Static Property
                //--------------------------------------
 
+               
+               /**
+                * Helper var for sortOn
+                */
+               static private var sortNames:Array;
+               static private var sortNamesOne:Array = [];
+               static private var muler:Number;
+               static private var zeroStr:String = String.fromCharCode(0);
+               
                //--------------------------------------
                //   Static Function
                //--------------------------------------
@@ -361,5 +370,55 @@ package org.apache.flex.utils
             return boundMethod;
         };
 
+               /**
+                * @author lizhi
+                * @param       arr
+                * @param       names
+                * @param       opt
+                */
+               public static function 
sortOn(arr:Array,names:Object,opt:int=0):void{
+                       if (names is Array){
+                               sortNames = names as Array;
+                       }else{
+                               sortNamesOne[0] = names;
+                               sortNames = sortNamesOne;
+                       }
+                       muler = (Array.DESCENDING & opt) > 0?-1: 1;
+                       if(opt&Array.NUMERIC){
+                               arr.sort(compareNumber);
+                       }else if (opt&Array.CASEINSENSITIVE){
+                               arr.sort(compareStringCaseinsensitive);
+                       }else{
+                               arr.sort(compareString);
+                       }
+               }
+               private static function compareStringCaseinsensitive(a:Object, 
b:Object):int{
+                       for each(var n:String in sortNames){
+                               var v:int = 
(a[n]||zeroStr).toString().toLowerCase().localeCompare((b[n]||zeroStr).toString().toLowerCase());
+                               if (v != 0){
+                                       return v*muler;
+                               }
+                       }
+                       return 0;
+               }
+               private static function compareString(a:Object, b:Object):int{
+                       for each(var n:String in sortNames){
+                               var v:int = 
(a[n]||zeroStr).toString().localeCompare((b[n]||zeroStr).toString());
+                               if (v != 0){
+                                       return v*muler;
+                               }
+                       }
+                       return 0;
+               }
+               
+               private static function compareNumber(a:Object, b:Object):int{
+                       for each(var n:String in sortNames){
+                               var v:int = a[n] - b[n];
+                               if (v!=0){
+                                       return v*muler;
+                               }
+                       }
+                       return 0;
+               }
        }
 }

Reply via email to