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 相关文章推荐
Jqyery中同等与js中windows.onload的应用
May 10 Javascript
AngularJS Module方法详解
Dec 08 Javascript
JavaScript中Function函数与Object对象的关系
Dec 17 Javascript
JS简单获取及显示当前时间的方法
Aug 03 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
BootStrap Select清除选中的状态恢复默认状态
Jun 20 Javascript
vue将对象新增的属性添加到检测序列的方法
Feb 24 Javascript
JavaScript私有变量实例详解
Jan 24 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 Javascript
layui字体图标 loading图标静止不旋转的解决方法
Sep 23 Javascript
JavaScript中数组去重的5种方法
Jul 04 Javascript
ES2020系列之空值合并运算符 '??'
Jul 22 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类的使用 实例代码讲解
2009/12/28 PHP
php简单的会话类代码
2011/08/08 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
javascript 打印页面代码
2009/03/24 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
初识Node.js
2014/09/03 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
理解javascript正则表达式
2016/03/08 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
一个超级简单的python web程序
2014/09/11 Python
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
python输入中文的实例方法
2020/09/14 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
计算机大学生的自我评价
2013/10/15 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
三字经教学反思
2014/04/26 职场文书
物理学专业求职信
2014/07/04 职场文书
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL