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; + } } }
