SortOn actually always returns an Array
diff --git a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as index d502aef..edb7404 100644 --- a/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as +++ b/frameworks/projects/Language/src/main/royale/org/apache/royale/utils/Language.as
@@ -368,7 +368,7 @@ * @param names * @param opt */ - public static function sortOn(arr:Array, names:Object, opt:Object = 0):void + public static function sortOn(arr:Array, names:Object, opt:Object = 0):Array { if (names is Array) { @@ -390,6 +390,11 @@ opt2 = /*opt as int*/ (int(opt) == opt) ? int(opt) : 0; } muler = (Array.DESCENDING & opt2) > 0 ? -1 : 1; + var orig:Array; + if (opt2 & Array.RETURNINDEXEDARRAY) + { + orig = arr.slice(); + } if (opt2 & Array.NUMERIC) { arr.sort(compareNumber); @@ -400,6 +405,18 @@ { arr.sort(compareString); } + if (opt2 & Array.RETURNINDEXEDARRAY) + { + var retArr:Array = []; + var n:int = arr.length; + for (var i:int = 0; i < n; i++) + { + var item:Object = orig[i]; + retArr.push(arr.indexOf(item)); + } + return retArr; + } + return arr; } private static function compareStringCaseinsensitive(a:Object, b:Object):int