1. sortOn () 方法 
2. 
3. AS3 function sortOn(fieldName:Object, options:Object = null):Array 
4. 
5. 語言版本 : ActionScript 3.0 
6. RuntimeVersions: AIR 1.0, Flash Player 9 
7. 
8. 
9. 
10. 根據陣列中的一個或多個欄位對陣列中的元素進行排序。陣列應具有下列特性: 
11. 
12. 該陣列是索引陣列,不是關聯陣列。 
13. 該陣列的每個元素都包含一個具有一個或多個屬性的物件。 
14. 所有這些物件都至少有一個公用屬性,該屬性的值可用於對該陣列進行排序。這樣的屬性稱為 field。 
15. 如果您傳遞多個 fieldName 參數,則第一個欄位表示主排序欄位,第二個欄位表示下一個排序欄位,依此類推。Flash 根據 Unicode 值排序。(ASCII 是 Unicode 的一個子集。) 如果所比較的兩個元素中均不包含 fieldName 參數中指定的欄位,則認為將該欄位設置為 undefined,在排序後的陣列中將連續放置這些元素,不必遵循任何特定順序。 
16. 
17. 默認情況下,Array。sortOn() 按以下方式進行排序: 
18. 
19. 排序區分大小寫(Z 優先於 a)。 
20. 按昇冪排序(a 優先於 b)。 
21. 修改該陣列以反映排序順序;在排序後的陣列中不按任何特定順序連續放置具有相同排序欄位的多個元素。 
22. 數值欄位按字串方式進行排序,因此 100 優先於 99,因為 "1" 的字串值比 "9" 的低。 
23. Flash Player 7 添加了 options 參數,您可以使用該參數覆蓋默認排序行為。若要對簡單陣列(例如,僅具有一個欄位的陣列)進行排序,或要指定一種 options 參數不支援的排序順序,請使用 Array.sort()。 
24. 
25. 若要傳遞多個標誌,請使用按位元“或”(|) 運算符分隔它們: 
26. 
27. my_array.sortOn(someFieldName, Array.DESCENDING | Array.NUMERIC); 
28. Flash Player 8 添加了按多個欄位進行排序時為每個欄位指定不同的排序選項的功能。在 Flash Player 8 和更高版本中,options 參數接受排序選項的陣列,以便每個排序選項對應於 fieldName 參數中的一個排序欄位。下例使用降冪排序對主排序欄位 a 排序,使用數位排序對第二個排序欄位 b 排序,使用不區分大小寫的排序對第三個排序欄位 c 排序: 
29. 
30. Array.sortOn (["a", "b", "c"], [Array.DESCENDING, Array.NUMERIC, Array.CASEINSENSITIVE]); 
31. 注意:fieldName 和 options 陣列必須具有相同數量的元素;否則,將忽略 options 陣列。此外,Array.UNIQUESORT 和 Array.RETURNINDEXEDARRAY 選項只能用作陣列中的第一個元素;否則,將忽略它們。 
32. 
33. 
34. 參數 fieldName:Object — 一個字串,它標識要用作排序值的欄位,或一個陣列,其中的第一個元素表示主排序欄位,第二個元素表示第二排序欄位,依此類推。 
35. 
36. options:Object (default = null) — 所定義常數的一個或多個數字或名稱,相互之間由 bitwise OR (|) 運算符隔開,它們可以更改排序行為。options 參數可接受以下值: 
37. Array.CASEINSENSITIVE 或 1 
38. Array.DESCENDING 或 2 
39. Array.UNIQUESORT 或 4 
40. Array.RETURNINDEXEDARRAY 或 8 
41. Array.NUMERIC 或 16 
42. 
43. 
44. 
45. 
46. 返回 Array — 返回值取決於您是否傳遞任何參數: 
47. 如果您為 options 參數指定值 4 或 Array.UNIQUESORT,並且要排序的兩個或多個元素具有相同的排序欄位,則返回值 0 並且不修改陣列。 
48. 如果為 options 參數指定值 8 或 Array.RETURNINDEXEDARRAY,則返回反映排序結果的陣列並且不修改陣列。 
49. 否則,不返回任何結果並修改該陣列以反映排序順序。 
50. 
51. 
52. 另請參見 
53. 
54. | (bitwise OR) 
55. Array.sort() 
56. 
57. 示例 
58. 
59. 
60. 下面的代碼創建一個空的 Array 物件 vegetables,然後通過五次調用如下方法來填充該陣列:push()。每次調用 push() 時,都創建一個新的 Vegetable 物件(通過調用 Vegetable() 構造函數,該構造函數接受 String (name) 和 Number (price) 對象)。使用所顯示的值調用 push() 五次,會生成下麵的陣列:[lettuce:1.49, spinach:1.89, asparagus:3.99, celery:1.29, squash:1.44]。然後,使用 sortOn() 方法(使用 name 參數)獲得以下陣列:[asparagus:3.99, celery:1.29, lettuce:1.49, spinach:1.89, squash:1.44]。然後,使用 price 參數及 NUMERIC 和 DESCENDING 常數再次調用 sortOn() 方法,以得到按數位降冪排序的陣列:[asparagus:3.99, spinach:1.89, lettuce:1.49, squash:1.44, celery:1.29]。 
61. 
62. var vegetables:Array = new Array(); 
63. vegetables.push(new Vegetable("lettuce", 1.49)); 
64. vegetables.push(new Vegetable("spinach", 1.89)); 
65. vegetables.push(new Vegetable("asparagus", 3.99)); 
66. vegetables.push(new Vegetable("celery", 1.29)); 
67. vegetables.push(new Vegetable("squash", 1.44)); 
68. 
69. trace(vegetables); 
70. // lettuce:1.49, spinach:1.89, asparagus:3.99, celery:1.29, squash:1.44 
71. 
72. vegetables.sortOn("name"); 
73. trace(vegetables); 
74. // asparagus:3.99, celery:1.29, lettuce:1.49, spinach:1.89, squash:1.44 
75. 
76. vegetables.sortOn("price", Array.NUMERIC | Array.DESCENDING); 
77. trace(vegetables); 
78. // asparagus:3.99, spinach:1.89, lettuce:1.49, squash:1.44, celery:1.29 
79. 
80. class Vegetable { 
81. public var name:String; 
82. public var price:Number; 
83. 
84. public function Vegetable(name:String, price:Number) { 
85. this.name = name; 
86. this.price = price; 
87. } 
88. 
89. public function toString():String { 
90. return " " + name + ":" + price; 
91. } 
92. } 
93. 
94. 下面的代碼創建一個空的 Array 物件 records,然後通過三次調用如下方法來填充該陣列:push()。每次調用 push() 時,將字串 name 和 city 以及 zip 數位添加到 records。使用三個 for 迴圈輸出陣列元素。第一個 for 迴圈將按元素的添加順序輸出元素。第二個 for 迴圈在先按名稱後按城市對 records 進行排序後運行,排序時使用 sortOn() 方法。第三個 for 迴圈生成不同的輸出,因為 records 先按城市,再按名稱重新排序。 
95. 
96. 
97. var records:Array = new Array(); 
98. records.push({name:"john", city:"omaha", zip:68144}); 
99. records.push({name:"john", city:"kansas city", zip:72345}); 
100. records.push({name:"bob", city:"omaha", zip:94010}); 
101. 
102. for(var i:uint = 0; i < records.length; i++) { 
103. trace(records[i].name + ", " + records[i].city); 
104. } 
105. // Results: 
106. // john, omaha 
107. // john, kansas city 
108. // bob, omaha 
109. 
110. trace("records.sortOn('name', 'city');"); 
111. records.sortOn(["name", "city"]); 
112. for(var i:uint = 0; i < records.length; i++) { 
113. trace(records[i].name + ", " + records[i].city); 
114. } 
115. // Results: 
116. // bob, omaha 
117. // john, kansas city 
118. // john, omaha 
119. 
120. trace("records.sortOn('city', 'name');"); 
121. records.sortOn(["city", "name"]); 
122. for(var i:uint = 0; i < records.length; i++) { 
123. trace(records[i].name + ", " + records[i].city); 
124. } 
125. // Results: 
126. // john, kansas city 
127. // bob, omaha 
128. // john, omaha 
129. 
130. 
131. 下面的代碼創建一個空的 Array 物件 users,然後通過四次調用如下方法來填充該陣列:push()。每次調用 push() 時,都創建一個 User 物件(使用 User() 構造函數),同時將 name 字串和 age uint 添加到用戶。生成的陣列集為 [Bob:3,barb:35,abcd:3,catchy:4]。 
132. 然後按以下方式對陣列進行排序: 
133. 
134. 僅按姓名排序,得到陣列 [Bob:3,abcd:3,barb:35,catchy:4] 
135. 按姓名排序並使用 CASEINSENSITIVE 常數,得到陣列 [abcd:3,barb:35,Bob:3,catchy:4] 
136. 按姓名排序並使用 CASEINSENSITIVE 和 DESCENDING 常數,得到陣列 [catchy:4,Bob:3,barb:35,abcd:3] 
137. 僅按年齡排序,得到陣列 [abcd:3,Bob:3,barb:35,catchy:4] 
138. 按年齡排序並使用 NUMERIC 常數,得到陣列 [Bob:3,abcd:3,catchy:4,barb:35] 
139. 按年齡排序並使用 DESCENDING 和 NUMERIC 常數,得到陣列 [barb:35,catchy:4,Bob:3,abcd:3] 
140. 
141. 然後,創建一個名為 indices 的陣列,並將按年齡排序並使用 NUMERIC 和 RETURNINDEXEDARRAY 常數的結果賦予該陣列,從而得到陣列 [Bob:3,abcd:3,catchy:4,barb:35],然後使用 for 迴圈輸出該陣列。 
142. 
143. 
144. class User { 
145. public var name:String; 
146. public var age:Number; 
147. public function User(name:String, age:uint) { 
148. this.name = name; 
149. this.age = age; 
150. } 
151. 
152. public function toString():String { 
153. return this.name + ":" + this.age; 
154. } 
155. } 
156. 
157. var users:Array = new Array(); 
158. users.push(new User("Bob", 3)); 
159. users.push(new User("barb", 35)); 
160. users.push(new User("abcd", 3)); 
161. users.push(new User("catchy", 4)); 
162. 
163. trace(users); // Bob:3,barb:35,abcd:3,catchy:4 
164. 
165. users.sortOn("name"); 
166. trace(users); // Bob:3,abcd:3,barb:35,catchy:4 
167. 
168. users.sortOn("name", Array.CASEINSENSITIVE); 
169. trace(users); // abcd:3,barb:35,Bob:3,catchy:4 
170. 
171. users.sortOn("name", Array.CASEINSENSITIVE | Array.DESCENDING); 
172. trace(users); // catchy:4,Bob:3,barb:35,abcd:3 
173. 
174. users.sortOn("age"); 
175. trace(users); // abcd:3,Bob:3,barb:35,catchy:4 
176. 
177. users.sortOn("age", Array.NUMERIC); 
178. trace(users); // Bob:3,abcd:3,catchy:4,barb:35 
179. 
180. users.sortOn("age", Array.DESCENDING | Array.NUMERIC); 
181. trace(users); // barb:35,catchy:4,Bob:3,abcd:3 
182. 
183. var indices:Array = users.sortOn("age", Array.NUMERIC | Array.RETURNINDEXEDARRAY); 
184. var index:uint; 
185. for(var i:uint = 0; i < indices.length; i++) { 
186. index = indices[i]; 
187. trace(users[index].name, ": " + users[index].age); 
188. } 
189. 
190. // Results: 
191. // Bob : 3 
192. // abcd : 3 
193. // catchy : 4 
194. // barb : 35

 

arrow
arrow
    全站熱搜

    聆六禽 發表在 痞客邦 留言(0) 人氣()