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对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 Javascript
JQuery中DOM事件冒泡实例分析
Jun 13 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
May 24 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
Feb 10 Javascript
vue使用axios实现文件上传进度的实时更新详解
Dec 20 Javascript
基于Vue的ajax公共方法(详解)
Jan 20 Javascript
谈谈JavaScript中super(props)的重要性
Feb 12 Javascript
详解React服务端渲染从入门到精通
Mar 28 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 Javascript
微信小程序服务器日期格式化问题
Jan 07 Javascript
JS数组的常用10种方法详解
May 08 Javascript
基于JS实现视频上传显示进度条
May 12 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自动获取目录下的模板的代码
2010/08/08 PHP
php数字游戏 计算24算法
2012/06/10 PHP
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
护理专业的自荐信
2013/10/22 职场文书
财务管理专业自荐信范文
2013/12/24 职场文书
违反学校规定检讨书
2014/01/18 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
学生周末长期请假条
2014/02/15 职场文书
如何写好建议书
2014/03/13 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
党员个人年度总结
2015/02/14 职场文书
社区工作者个人总结
2015/02/28 职场文书
行政上诉状范文
2015/05/23 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
DSP接收机前端设想
2022/04/05 无线电
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python