Groups | Blog | Home
all groups > macromedia flash flashcom > january 2006 >

macromedia flash flashcom : Array.sortOn ?


oxman_
1/22/2006 12:45:34 PM
In my main.asc i've try :
a = new Array();
test0 = new Object;
test1 = new Object;
test2 = new Object;
test3 = new Object;

test0.nom = "test 0";
test1.nom = "test 1";
test2.nom = "test 2";
test3.nom = "test 3";

test0.num = 6;
test1.num = 8;
test2.num = 4;
test3.num = 10;


a[0] = test0;
a[1] = test3;
a[2] = test1;
a[3] = test2;

a.sortOn("num", Array.NUMERIC);

for (i = 0; i < a.length; i++)
trace(i+": "+a.nom+" "+a.num);
}

but i've this error :
TypeError: a.sortOn is not a function

We can't use sortOn in AS server side !??
ekameleon
1/22/2006 2:33:01 PM
Hello :)

SSAS is not Actionscript ;) it's like JAVASCRIPT 1.5 !

Array.sortOn don't exist in Javascript 1.5 :(

See Mutator Methods :
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Mutator_methods

You code is false ... try :

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[i].name + " :: " + a[i].num ) ;
}

trace ("---- sort numeric ") ;

a.sort(sortNumeric) ;
var l = a.length ;
for (var i = 0; i < l; i++) {
trace( i + " : " + a[i].name + " :: " + a[i].num ) ;
}

trace ("---- sort Decendant") ;
a.reverse() ;
var l = a.length ;
for (var i = 0; i < l; i++) {
trace( i + " : " + a[i].name + " :: " + a[i].num ) ;
}

PS : SORRY for my english, i'm french ;)

bye :)



EKAMELEON - http://www.ekameleon.net/blog/



oxman_ a écrit :
[quoted text, click to view]
oxman_
1/22/2006 2:34:19 PM
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 ) ;
}
ekameleon
1/22/2006 3:39:27 PM
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 :
[quoted text, click to view]
ekameleon
1/22/2006 4:43:43 PM
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]
AddThis Social Bookmark Button