Flash Player 6;附加功能已在 Flash Player 7 中添加。
my_array
.sortOn("fieldName
" )my_array
.sortOn("fieldName
",option
|option
|... )my_array
.sortOn( [ "fieldName
" , "fieldName
" , ... ] )my_array
.sortOn( [ "fieldName
" , "fieldName
" , ...] ,option
|option
|... )
注意:在显示中括号 ([]) 的地方,您必须将它们包括在代码中;即,中括号不表示可选参数。
fieldName
一个字符串,标识 Array 的某元素中用作排序值的字段。
option
由 |(按位 OR)
运算符分隔的一个或多个数字或字符串,这些数字或字符串更改根据默认值排序的行为。下面是 option
可以接受的值:
Array.CASEINSENSITIVE
Array.DESCENDING
Array.UNIQUE
Array.RETURNINDEXEDARRAY
Array.NUMERIC
上述各个选项在下面的“说明”部分中将予以详细讨论。
返回值取决于是否传递任何参数:
option
指定值 4 或 Array.UNIQUE,并且所排序的两个或多个元素具有相同的排序字段,则 Flash 返回值 0 并且不修改该数组。 option
指定值 8 或 Array.RETURNINDEXEDARRAY,则 Flash 将返回反映排序结果的数组并且不修改该数组。 方法;基于数组中的一个或多个字段对数组中的元素进行排序。如果您传递多个 fieldName
参数,则第一个字段表示主排序字段,第二个字段表示下一个排序字段,依此类推。Flash 根据
ASCII (Unicode) 值排序。如果所比较的两个元素中的任何一个不包含在 fieldName
参数中指定的字段,则认为该字段是 undefined
,并且在排序后的数组中不按任何特定顺序连续放置这些元素。
默认情况下,Array
.sortOn()
按如下方式工作:
您可以使用 option
标志覆盖这些默认值。以下示例出于阐释目的使用 option
标志的不同形式。如果您要对简单数组(例如,只有一个字段的数组)进行排序,或者如果要指定 options
参数不支持的排序顺序,则使用 Array.sort()。
若要用数值格式传递多个标志,则用 |(按位 OR)
运算符分隔它们或将这些标志值加在一起。以下代码显示三种不同的方式来指定数值降序排序:
my_Array.sortOn(someFieldName, 2 | 16); my_Array.sortOn(someFieldName, 18); my_Array.sortOn(someFieldName, Array.DESCENDING | Array.NUMERIC);
如果您使用标志的字符串形式(例如,DESCENDING
),而不是数值形式 (2),则启用代码提示(请参见使用代码提示)。
考虑以下数组:
var my_array:Array = new Array(); my_array.push({password:"Bob", age:29}); my_array.push({password:"abcd", age:3}); my_array.push({password:"barb", age:35}); my_array.push({password:"catchy", age:4});
对密码字段执行默认排序将产生以下结果:
my_array.sortOn("password") // Bob // abcd // barb // catchy
对密码字段执行不区分大小写的排序将产生以下结果:
my_array.sortOn("password", Array.CASEINSENSITIVE) // abcd // barb // Bob // catchy
对密码字段执行不区分大小写的降序排序将产生以下结果:
my_array.sortOn("password", 1|2) // catchy // Bob // barb // abcd
对年龄字段执行默认排序将产生以下结果:
my_array.sortOn("age") // 29 // 3 // 35 // 4
对年龄字段执行数值排序将产生以下结果:
my_array.sortOn("age", 16) // 3 // 4 // 29 // 35
对年龄字段执行降序数值排序将产生以下结果:
my_array.sortOn("age", 18) // 35 // 29 // 4 // 3
执行排序时按如下所示更改数组中的元素:
// 在排序前
// my_array[0].age = 29;
// my_array[1].age = 3;
// my_array[2].age = 35;
// my_array[3].age = 4;
// 在不为 option
传递值 8 的任何排序后
my_array.sortOn("age", Array.NUMERIC);
// my_array[0].age = 3;
// my_array[1].age = 4;
// my_array[2].age = 29;
// my_array[3].age = 35;
执行返回索引数组的排序时不更改该数组中的元素:
// 在排序前
// my_array[0].age = 29;
// my_array[1].age = 3;
// my_array[2].age = 35;
// my_array[3].age = 4;
// 在返回包含索引值的数组的排序后
// 请注意,原始数组未更改。
// 然后,可以使用返回的数组显示排序的信息,
// 而不必修改原始数组。
var indexArray:Array = my_array.sortOn("age", Array.RETURNINDEXEDARRAY
);
// my_array[0].age = 29;
// my_array[1].age = 3;
// my_array[2].age = 35;
// my_array[3].age = 4;
此示例创建一个新数组,并且按照字段 name
和 city
对该新数组排序:第一次排序使用 name
作为第一个排序值,使用 city
作为第二个排序值。第二次排序使用 city
作为第一个排序值,使用 name
作为第二个排序值。
var rec_array = new Array(); rec_array.push( { name:"john", city:"omaha", zip: 68144 } ); rec_array.push( { name:"john", city:"kansas city", zip: 72345 } ); rec_array.push( { name:"bob", city:"omaha", zip: 94010 } ); for(i=0; i<rec_array.length; i++) { trace(rec_array[i].name + ", " + rec_array[i].city); } // 结果为 // john, omaha // john, kansas city // bob, omaha rec_array.sortOn( [ "name", "city" ]); for(i=0; i<rec_array.length; i++) { trace(rec_array[i].name + ", " + rec_array[i].city); } // 结果为 // bob, omaha // john, kansas city // john, omaha rec_array.sortOn( ["city", "name" ]); for(i=0; i<rec_array.length; i++) { trace(rec_array[i].name + ", " + rec_array[i].city); } // 结果为 // john, kansas city // bob, omaha // john, omaha