Flash CS3 文档 |
|||
| ActionScript 2.0 语言参考 > ActionScript 类 > Array > sortOn(Array.sortOn 方法) | |||
根据数组中的一个或多个字段对数组中的元素进行排序。数组应具有下列特性:
如果您传递多个 fieldName 参数,则第一个字段表示主排序字段,第二个字段表示下一个排序字段,依此类推。Flash 根据 Unicode 值排序。(ASCII 是 Unicode 的一个子集。)如果所比较的两个元素中的任何一个不包含在 fieldName 参数中指定的字段,则认为该字段为 undefined,并且在排序后的数组中不按任何特定顺序连续放置这些元素。
默认情况下,Array. sortOn() 按以下方式进行排序:
Flash Player 7 添加了 options 参数,您可以使用该参数覆盖默认排序行为。若要对简单数组(例如,仅具有一个字段的数组)进行排序,或要指定一种 options 参数不支持的排序顺序,请使用 Array.sort()。
若要传递多个标志,请使用按位 OR 运算符 (|) 分隔各个标志:
my_array.sortOn(someFieldName, Array.DESCENDING | Array.NUMERIC);
Flash Player 8 添加了按多个字段进行排序时为每个字段指定不同的排序选项的功能。在 Flash Player 8 中,options 参数接受一组排序选项,以便每个排序选项对应于 fieldName 参数中的一个排序字段。下面的示例使用降序排序对主排序字段 a 排序,使用数字排序对第二个排序字段 b 排序,使用不区分大小写的排序对第三个排序字段 c 排序:
Array.sortOn (["a", "b", "c"], [Array.DESCENDING, Array.NUMERIC, Array.CASEINSENSITIVE]);
注意:fieldName 和 options 数组必须具有相同数量的元素;否则,将忽略 options 数据。此外,Array.UNIQUESORT 和 Array.RETURNINDEXEDARRAY 选项只能用作数组中的第一个元素;否则,将忽略它们。
可用性:ActionScript 1.0、Flash Player 6 ― Flash Player 7 中新增 options 参数。Flash Player 8 中新增在多个排序字段上使用不同 options 参数的能力。
fieldName:Object ― 一个标识要用作排序值的字段的字符串,或一个数组,其中的第一个元素表示主排序字段,第二个元素表示第二排序字段,依此类推。
options:Object [可选] ― 所定义常数的一个或多个数字或名称,相互之间由 bitwise OR (|) 运算符隔开,它们可以更改排序行为。options 参数可接受以下值:
Array.CASEINSENSITIVE 或 1Array.DESCENDING 或 2Array.UNIQUESORT 或 4Array.RETURNINDEXEDARRAY 或 8Array.NUMERIC 或 16如果您使用标志的字符串形式(例如,DESCENDING),而不是数字形式 (2),则启用代码提示。
Array ― 返回值取决于是否传递任何参数:
options 参数指定值 4 或 Array.UNIQUESORT,并且要排序的两个或多个元素具有相同的排序字段,则返回值 0 并且不修改数组。options 参数指定值 8 或 Array.RETURNINDEXEDARRAY,则返回反映排序结果的数组并且不修改数组。下面的示例创建一个新数组,并且按照 name 字段和 city 字段对该新数组进行排序。第一次排序使用 name 作为第一个排序值,使用 city 作为第二个排序值。第二次排序使用 city 作为第一个排序值,使用 name 作为第二个排序值。
var rec_array: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);
}
// Results:
// 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);
}
// Results:
// 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);
}
// Results:
// john, kansas city
// bob, omaha
// john, omaha
下面的对象数组由说明如何使用 options 参数的后续示例使用:
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});
对 password 字段执行默认排序将产生以下结果:
my_array.sortOn("password");
// Bob
// abcd
// barb
// catchy
对 password 字段执行不区分大小写的排序将产生以下结果:
my_array.sortOn("password", Array.CASEINSENSITIVE);
// abcd
// barb
// Bob
// catchy
对 password 字段执行不区分大小写的降序排序将产生以下结果:
my_array.sortOn("password", Array.CASEINSENSITIVE | Array.DESCENDING);
// catchy
// Bob
// barb
// abcd
对 age 字段执行默认排序将产生以下结果:
my_array.sortOn("age");
// 29
// 3
// 35
// 4
对 age 字段执行数值排序将产生以下结果:
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
对 age 字段执行降序数值排序将产生以下结果:
my_array.sortOn("age", Array.DESCENDING | Array.NUMERIC);
// my_array[0].age = 35
// my_array[1].age = 29
// my_array[2].age = 4
// my_array[3].age = 3
在使用 Array.RETURNEDINDEXARRAY 排序选项时,您必须将返回值分配给不同的数组。原始数组不会被修改。
var indexArray:Array = my_array.sortOn("age", Array.RETURNINDEXEDARRAY);
| 按位 OR 运算符, sort(Array.sort 方法)
Flash CS3
当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00001367.html