Don’t forget that the Array.sort() method sorts using string values by default, so even when sorting an array of numbers or ints, they will be sorted as if they were strings. To get numeric sorting, so that “10” comes after “2”, use the Array.NUMERIC sort option, e.g.:

 

myArray.sort(Array.NUMERIC);

 

Here’s the relevant example from the ActionScript documentation for Array.sort():

 

The following code creates the Array object numbers with elements [3,5,100,34,10]. A call to sort() without any parameters sorts alphabetically, producing the undesired result [10,100,3,34,5]. To properly sort numeric values, you must pass the constant NUMERIC to the sort() method, which sorts numbers as follows: [3,5,10,34,100].

Note: The default behavior of the sort() function is to handle each entity as a string. The Array.NUMERIC argument does not actually convert other data types to the Number data type; it simply allows the sort algorithm to recognize numbers.

 

var numbers:Array = new Array(3,5,100,34,10);

 

trace(numbers); // 3,5,100,34,10

numbers.sort();

trace(numbers); // 10,100,3,34,5

numbers.sort(Array.NUMERIC);

trace(numbers); // 3,5,10,34,100

 

 

Francis

 

 


From: [email protected] [mailto:[email protected]] On Behalf Of Jim Robson
Sent: Thursday, June 08, 2006 10:11 AM
To: [email protected]
Subject: RE: [flexcoders] selectedIndices are Strings???

 

Thanks Tom,

 

I believe array indices are ints, not strings. However, I also believe that datagrid indices are strings, because when I used the Array.sort() function on the DataGrid.selectedIndices array, the order was all messed up. For example, “10” came before “2”. For that reason, I ended up writing a custom sort function to get around the issue.

 

Thanks again!

 

Jim

 


From: [email protected] [mailto:[email protected]] On Behalf Of Tom Bray
Sent: Thursday, June 08, 2006 1:07 PM
To: [email protected]
Subject: Re: [flexcoders] selectedIndices are Strings???

 

Try either of these two options:

            for( var i:int; i < arr.length; i++ )
            {
                trace( arr[i] );
            }
           
//or

            for each( var i:int in arr )
            {
                trace( i );
            }

The for...in loop that you're using is for iterating over the properties of objects, which it expects to evaluate as strings.  So, in your for...in loop, the var i refers to the indices of the array, not the values you're looking for which are the selectedIndices of your dg.  The for...each loop above is new to AS3 and is the simplest way to do what you want.

HTH,

Tom

On 6/8/06, Jim Robson <[EMAIL PROTECTED]> wrote:

I don't understand why DataGrid.selectedIndices returns an array of Strings. I thought that indices were generally integers. (For example, Array.indexOf returns an int.)

Can anyone explain why the selected index of a DataGrid is a String?

When "dgTest" is a DataGrid instance, the following code generates a compiler error:

 

 

var arr:Array = dgTest.selectedIndices;

for(var i:int in arr){

// do something

}

 

The error that the compiler returns is as follows:

"Implicit coercion of a value of type String to an unrelated type int.  "

 

__._,_.___

--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com





SPONSORED LINKS
Web site design development Computer software development Software design and development
Macromedia flex Software development best practice


YAHOO! GROUPS LINKS




__,_._,___

Reply via email to