Array.sortOn()

可用性

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 可以接受的值:

上述各个选项在下面的“说明”部分中将予以详细讨论。

返回

返回值取决于是否传递任何参数:

说明

方法;基于数组中的一个或多个字段对数组中的元素进行排序。如果您传递多个 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;

示例

此示例创建一个新数组,并且按照字段 namecity 对该新数组排序:第一次排序使用 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

另请参见

|(按位 OR)Array.sort()