一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

as3 Array.UNIQUESOR:如果数组有相同元素,则放弃排序

时间:2013-07-18 编辑:简简单单 来源:一聚教程网

今天遇到一个很奇怪的AS3数组排序问题,我们知道sortOn可以对数组的元素按指定字段进行排序。我做的邮件系统中,首先根据邮件状态排,再根据索引排

但是策划和我说有bug,我一看还真有,都乱了。于是我检查了了下,发现服务器没有错,应该是sortOn排序有错了。

 

测试程序:

 代码如下 复制代码
1.var arr:Array = [];
2.var mailVo:Object;
3.for(var i:int = 0;i < 20 ;i++)
4.{
5.         mailVo = new Object();
6.         mailVo.index = i;//邮件的索引,最早发送的index = 0
7.         mailVo.state = 1;//邮件状态, ==0是未读,==1是已读
8.         arr.push(mailVo);
9.}
10.//我希望未读邮件显示在前
11.arr.sortOn(["state"],[Array.NUMERIC]);
12.
13.for(i = 0;i < 20 ;i++)
14.{
15.         trace(arr[i].index);
16.}

 

输出结果:

10 1 2 3 4 5 6 7 8 9 0 11 12 13 14 15 16 17 18 19

 

我在想,按理说如果state都相同的话,顺序应该不变啊!

 

通过群求助,我知道了问题所在。解决的办法是:

arr.sortOn(["state"],[Array.NUMERIC | Array.UNIQUESORT ]);

 

UNIQUESORT:如果数组有相同元素,则放弃排序

手册上是这么说的:

如果任何两个要排序的元素或字段的值相同,唯一排序选项就会终止排序。

 

还有排序的一点要注意的:

元素无论属于何种数据类型,都作为字符串进行排序,所以 100 在 99 之前,这是因为 "1" 的字符串值小于 "9" 的字符串值。

热门栏目