手机版

javascript Array.sort()跨浏览器下需要考虑的问题

时间:2021-10-25 来源:互联网 编辑:宝哥软件园 浏览:

然而,在跨浏览器测试期间,在chrome浏览器中发现了一个问题。测试人员发现(见图1),当根据chrome下的一列排序时,如果两行的排序值相同,chrome不会像往常一样保持两列的顺序不变,而是按顺序进行切换。谷歌提问后,我们发现ECMAscript规范没有指定具体的排序算法,导致每个浏览器都有自己的排序算法。但是有些厂商是基于不稳定的排序算法实现的,比如chrome和3.0之前的Mozilla/Firefox,不稳定,但IE是稳定的排序算法。该算法实现上的差异也导致不同浏览器显示的图表结果不一致。

图1:数组左侧的数字表示初始化时的顺序。想了想,我和小组另一位成员分别给出了自己的解决方案。他的意见是实现统一控制的特定排序算法。鉴于网上现成的排序算法很多,排序算法是程序员的基础,这种方法实现起来并不复杂,唯一的工作就是实现代码。不过我觉得其实还有一个更简单的方法,因为我们的数据是基于XSLT从xml解析而来的,XSLT知道每一行数据的序号(当然如果是服务器端代码从数据库或者webservice读取的话,很容易取这个值),所以我觉得我们可以在XSLT中的每一列添加一个Index属性,比如第一行Index=1,第二行Index=2.因此,如果在排序大或小时发现这两个值相同,请比较它们的行号,以便只需向比较函数添加两行代码。下面是实现代码和结果的截图:复制的代码如下:VarArray=[{Index :1,Val:25},{Index :2,Val:25},{Index :3,Val336045},{Index :4,Val336078}]。数组。sort(函数(a,b){ If(a . val===b . val){//如果这两个值在这里相同,将根据它们的行号(初始化时的索引值)进行比较。返回a指数- b指数;}返回a . val-b . val;})为(var I=0;i array.lengthi ) { document.write('p '数组[i])。索引“:”数组[i]。val '/p ');}更新结果截图:

当然,这只是解决方案之一。我的目标是最小化我们需要维护的代码量,从而最小化bug。一个思路,希望对你有帮助。挫折就像一堵墙,它迫使我们向自己证明,我们多么想要这面墙背后的宝藏。

版权声明:javascript Array.sort()跨浏览器下需要考虑的问题是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。