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操作文本框readOnly
May 15 Javascript
Stop SQL Server
Jun 21 Javascript
Google AJAX 搜索 API实现代码
Nov 17 Javascript
js中函数声明与函数表达式
Jun 03 Javascript
详解JavaScript中getFullYear()方法的使用
Jun 10 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
Aug 26 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
Sep 13 Javascript
Vue 处理表单input单行文本框的实例代码
May 09 Javascript
vuex(vue状态管理)的特殊应用案例分享
Mar 03 Javascript
8个JS的reduce使用实例和reduce操作方式
Oct 05 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学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
2013/07/01 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
php按单词截取字符串的方法
2015/04/07 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
javascript引导程序
2008/10/26 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
农林环境专业求职信
2014/03/13 职场文书
《海底世界》教学反思
2014/04/16 职场文书
环保志愿者活动方案
2014/08/14 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
辞职信怎么写?
2019/05/21 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
DSP接收机前端设想
2022/04/05 无线电
MySQL的存储过程和相关函数
2022/04/26 MySQL