a small fast test : Array.prototype.SortOn method in SSAS :)
but there can be bugs...
Would be necessary to see whether it is possible to find the script of
MM of the method sortOn in Flash ? :)
// --- Array
Array.CASEINSENSITIVE = 1;
Array.DESCENDING = 2 ;
Array.NUMERIC = 16 ;
Array.RETURNINDEXEDARRAY = 8 ;
Array.UNIQUESORT = 4 ;
Array.prototype.indexOf = function( value ) {
var l = this.length ;
for( var i = 0 ; i<l ; i++ ) {
if (this[i] == value) return i ;
}
return -1;
}
Array.prototype.sortOn = function ( propName , options ) {
var owner = this ;
var sortFunction = function(o1, o2) {
var v1 = (o1[propName] != undefined) ? o1[propName].valueOf() : "" ;
var v2 = (o2[propName] != undefined) ? o2[propName].valueOf() : "" ;
function noCase() {
if (typeof(v1) == "string" || v1 instanceof String) {
v1 = v1.toLowerCase() ;
}
if (typeof(v2) == "string" || v2 instanceof String) {
v2 = v2.toLowerCase() ;
}
}
function numeric() {
v1 = Number(v1) ;
v2 = Number(v2) ;
v1 = isNaN(v1) ? 0 : v1 ;
v2 = isNaN(v2) ? 0 : v2 ;
}
function reverse() {
var tmp = v1 ;
v1 = v2 ;
v2 = tmp ;
}
switch (options) {
case Array.CASEINSENSITIVE :
case Array.CASEINSENSITIVE | Array.RETURNINDEXEDARRAY :
noCase() ;
break ;
case Array.NUMERIC :
case Array.NUMERIC | Array.RETURNINDEXEDARRAY :
numeric() ;
break ;
case Array.DESCENDING :
case Array.DESCENDING | Array.RETURNINDEXEDARRAY :
reverse() ;
break ;
case Array.CASEINSENSITIVE | Array.DESCENDING :
case Array.CASEINSENSITIVE | Array.DESCENDING |
Array.RETURNINDEXEDARRAY :
noCase() ;
reverse() ;
break ;
case Array.NUMERIC | Array.DESCENDING :
case Array.NUMERIC | Array.DESCENDING | Array.RETURNINDEXEDARRAY :
numeric() ;
reverse() ;
break ;
case Array.UNIQUESORT :
if (v1 == v2) return ;
break
}
if (v1 < v2) return -1 ;
else if (v1 > v2) return 1 ;
else return 0 ;
}
switch (options) {
case Array.RETURNINDEXEDARRAY :
case Array.RETURNINDEXEDARRAY | Array.NUMERIC :
case Array.RETURNINDEXEDARRAY | Array.CASEINSENSITIVE :
case Array.RETURNINDEXEDARRAY | Array.NUMERIC | Array.DESCENDING :
case Array.RETURNINDEXEDARRAY | Array.CASEINSENSITIVE | Array.DESCENDING :
var tmp = [].concat(this) ;
tmp.sort(sortFunction) ;
var result = [] ;
var l = this.length ;
for (var i = 0; i < l; i++) {
var index = tmp.indexOf(this[i]) ;
result.push(index) ;
}
return result ;
default :
return this.sort(sortFunction) ;
}
}
trace ("---- Test") ;
var a = [
{ name:"test 0" , num:6 } ,
{ name:"Test 1" , num:8 } ,
{ name:"test 2" , num:4 } ,
{ name:"test 3" , num:10 }
]
var l = a.length ;
for (var i = 0; i < l; i++) {
trace( ">> " + a[i].name + " :: " + a[i].num ) ;
}
trace ("---- sort num Array.NUMERIC | Array.DESCENDING") ;
var r = a.sortOn("num", Array.NUMERIC | Array.DESCENDING) ;
var l = a.length ;
for (var i = 0; i < l; i++) {
trace( ">> " + a[i].name + " :: " + a[i].num ) ;
}
trace ("---- sort name") ;
a.sortOn("name") ;
var l = a.length ;
for (var i = 0; i < l; i++) {
trace( ">> " + a[i].name + " :: " + a[i].num ) ;
}
trace ("---- sort name Array.CASEINSENSITIVE") ;
a.sortOn("name", Array.CASEINSENSITIVE) ;
var l = a.length ;
for (var i = 0; i < l; i++) {
trace( ">> " + a[i].name + " :: " + a[i].num ) ;
}
trace ("---- sort name Array.RETURNINDEXEDARRAY") ;
//var result = a.sortOn("name", Array.CASESEINSENTIVE |
Array.RETURNINDEXEDARRAY) ;
//var result = a.sortOn("name", Array.RETURNINDEXEDARRAY) ;
//trace (result) :
var result = a.sortOn("num", Array.NUMERIC | Array.DESCENDING |
Array.RETURNINDEXEDARRAY ) ;
trace (result) ;
var result = a.sortOn("num", Array.NUMERIC | Array.RETURNINDEXEDARRAY ) ;
trace (result) ;
var result = a.sortOn("name", Array.NUMERIC | Array.RETURNINDEXEDARRAY ) ;
trace (result) ;
trace ("---- sort name Array.UNIQUESORT") ;
a.push({ name:"test 1" , num:60 } ) ;
a.sortOn("name", Array.UNIQUESORT) ;
var l = a.length ;
for (var i = 0; i < l; i++) {
trace( ">> " + a[i].name + " :: " + a[i].num ) ;
}
bye :)
ekameleon a écrit :
[quoted text, click to view] > Hello :)
>
> You must read with attention my code :)
>
> you write :
>
> for (var i = 0; i < l; i++) {
> trace( i + " : " + a.name + " :: " + a.num ) ;
> }
>
> I write :
>
> for (var i = 0; i < l; i++) {
> trace( i + " : " + a[i].name + " :: " + a[i].num ) ;
> }
>
> .... you see the difference ? ;)
>
>
> bye :)
>
> oxman_ a écrit :
>> Thanks it's work, but few bug, this example work :
>>
>>
>> var sortNumeric = function (o1, o2) {
>> var num1 = (o1 == undefined || isNaN(o1.num)) ? 0 : o1.num ;
>> var num2 = (o2 == undefined || isNaN(o2.num)) ? 0 : o2.num ;
>> if (num1 < num2) return -1 ;
>> else if (num1 > num2) return 1 ;
>> else return 0 ;
>> }
>>
>> var a = [
>> { name:"test 0" , num:6 } ,
>> { name:"test 1" , num:8 } ,
>> { name:"test 2" , num:4 } ,
>> { name:"test 3" , num:10 }
>> ]
>>
>> var l = a.length ;
>> for (var i = 0; i < l; i++) {
>> trace( i + " : " + a.name + " :: " + a.num ) ;
>> }
>>
>> trace ("---- sort numeric ") ;
>>
>> a.sort(sortNumeric) ;
>> var l = a.length ;
>> for (var i = 0; i < l; i++) {
>> trace( i + " : " + a.name + " :: " + a.num ) ;
>> }
>>
>> trace ("---- sort Decendant") ;
>> a.reverse() ;
>> var l = a.length ;
>> for (var i = 0; i < l; i++) {
>> trace( i + " : " + a.name + " :: " + a.num ) ;
>> }