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


Posted in Javascript onDecember 07, 2009

然而在做跨浏览器的测试时在chrome浏览器下发现了一个问题,测试人员发现(见图1),在chrome下依据某列排序时,如果两行的排序数值相同,chrome不是按通常情况保持这两列的顺序不变,而是将他们顺序调换。在google一下问题之后,我们发现原来是当初ECMAscript规范中并未规定具体的sort算法,所以导致各个浏览器都有自己的sort算法,然而由于有些厂商是基于不稳定的排序算法实现的,如chrome和Mozilla/Firefox 3.0以前的排序算法都是不稳定的,不过IE是稳定的排序算法。这种算法实现的差异也导致了图表在不同浏览器下显示的结果不一致。

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

                    图1:数组左边的数字表示它初始化时候的顺序

思考了一下,我和组里另外一个成员分别给出了自己的解决方法,他的意见是通过自己实现具体的sort算法来统一控制,鉴于网上的现成的排序算法很多并且排序算法是程序员的基础,这种方式实现起来并不复杂,唯一的工作就是代码的实现。不过我认为其实有更简单的方法,因为我们的数据是基于XSLT从xml中解析出来的,而XSLT是知道每行数据的的序号的(当然如果是由服务器端代码从数据库或webservice读取一样很容易取该值),所以我认为可以在XSLT中给每列添加一个Index属性,e.g.第一行Index=1,第二行Index=2...这样在sort比较大小的时候如果发现两个数值相同,则比较其行号,这样最终只需要在在比较函数中添加两行代码即可实现。下面是实现代码和结果截图:

var array = [ 
{Index:1,val:25}, 
{Index:2,val:25}, 
{Index:3,val:45}, 
{Index:4,val:78}]; 
array.sort(function(a, b) { 
if (a.val === b.val) { 
//此处两值相同,则根据其行号(初始化时的索引值)进行比较。 
return a.Index - b.Index; 
} 
return a.val - b.val; 
}) 
for (var i = 0; i < array.length; i++) { 
document.write("<p>" + array[i].Index + ":" + array[i].val + "</p>"); 
}

更新后结果截图:

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

当然这只是解决方法之一,我的目的只是尽量减少我们需要维护的代码量,这样可以尽量减少bug。一个思路,希望对你有所帮助。

挫折就像一面墙,这面墙迫使我们向自己证明,我们是多么渴望得到这面墙后面的宝藏
Javascript 相关文章推荐
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
jQuery实现强制cookie过期方法汇总
May 22 Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 Javascript
Js动态设置rem来实现移动端字体的自适应代码
Oct 14 Javascript
如何快速上手Vuex
Feb 14 Javascript
JavaScript和JQuery获取DIV值的方法示例
Mar 07 Javascript
微信小程序 判断手机号的实现代码
Apr 19 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
Mar 12 Javascript
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
JavaScript常用工具方法封装
Feb 12 Javascript
vue实现五子棋游戏
May 28 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
Dec 07 #Javascript
js event事件的传递与冒泡处理
Dec 06 #Javascript
IE和firefox浏览器的event事件兼容性汇总
Dec 06 #Javascript
js 操作select相关方法函数
Dec 06 #Javascript
JavaScript 对象模型 执行模型
Dec 06 #Javascript
ASP Json Parser修正版
Dec 06 #Javascript
jquery ready函数源代码研究
Dec 06 #Javascript
You might like
PHP简洁函数小结
2011/08/12 PHP
php 如何获取数组第一个值
2013/08/06 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
js滚动条多种样式,推荐
2007/02/05 Javascript
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
Python中 Lambda表达式全面解析
2016/11/28 Python
Python探索之SocketServer详解
2017/10/28 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
法国春天百货官网:Printemps.com
2020/06/29 全球购物
无工作经验者个人求职信范文
2013/12/22 职场文书
毕业生护理专业个人求职信范文
2014/01/04 职场文书
销售目标责任书
2014/07/23 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
八一建军节慰问信
2015/02/14 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏