as3 Array.UNIQUESOR:如果数组有相同元素,则放弃排序
今天遇到一个很奇怪的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" 的字符串值。
补充:flash教程,动画技术