Array.prototype.sort() 方法一般用来对数组中的元素进行排序,既可以对数字排序,也可以对字符串进行排序。如果没有指定比较函数,会根据数组中字符的Unicode编码来进行排序。这对于字符串排序,没有问题,但是对于数字的排序就会出现错误。

    var points = [ 'banana', 'orange','apple' ];
points.sort();
console.log("Sort: "+points.join(","));//Sort: apple,banana,orange
        var points = [3, 10, 1, 5];
points.sort();
console.log("Sort: "+points.join(",")); // 1,10,3,5

所以,这是还是需要指定一个比较函数。数组元素的排序会根据比较函数的返回结果来确定。如果 function(a,b) <0,a在b的前面;如果function(a,b)>0,b在a的前面。但是这并不是说小的总在前面(升序)。这个要看你的比较函数怎么写了。如果比较函数是function(a,b){return a-b} ,就会得到升序的结果;如果是 function(a,b){return b-a} 就会得到降序的结果。

    var points = [3, 10, 1, 5];
(function myFunction() {
points.sort(function(a, b){
//console.log(a+", "+b);
return a-b});
console.log("Sort: "+points.join(",")); // 1,3,5,10
})();

在上面的例子中,首次会传入function(3,10) 因为 -7<0 ,3会排在10的前面,所以是升序。反之 7>0 ,所以这时 10 会在3 的前面,是降序。

问题来了,数组中的元素是如何传入比较函数的,比较函数是如何工作的?

最简单的是,输出每次传入比较函数的参数,就可以推测大致比较过程。例如上面的例子中,

chrome 43.0.2357.134 中的结果:

Init: 3,10,1,5
   3, 10
   10, 1
   3, 1
   10, 5
   3, 5
Sort: 1,3,5,10

IE 10 中的结果:

Firefox 37.0.1 中的结果:

各种浏览器的实现不太一样,每个浏览器不同版本可能也有差异,但是最终结果是一样的。

最后搜到了一个结果,仅供参考。

sort in different broswer

javascript how sort() work的更多相关文章

  1. 深入了解javascript的sort方法

    在javascript中,数组对象有一个有趣的方法 sort,它接收一个类型为函数的参数作为排序的依据.这意味着开发者只需要关注如何比较两个值的大小,而不用管“排序”这件事内部是如何实现的.不过了解一 ...

  2. JavaScript中sort方法的一个坑(leetcode 179. Largest Number)

    在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...

  3. JavaScript 使用 sort() 方法从数值上对数组进行排序

    使用 sort() 方法从数值上对数组进行排序. <html> <body> <script type="text/javascript"> f ...

  4. javascript函数sort

    sort函数用于对数组的元素进行排序 语法:arrayObject.sort(sortby); 参数sortby可选,规定排序顺序,必须是函数. 如果调用该方法时没有使用参数,将按照字幕顺序进行排序, ...

  5. JavaScript:sort() 方法

    ylbtech-JavaScript:sort() 方法 JavaScript sort() 方法 1. 定义和用法返回顶部 sort() 方法用于对数组的元素进行排序. 语法 arrayObject ...

  6. JavaScript中sort()方法

    sort()方法主要是用于对数组进行排序,默认情况下该方法是将数组元素转换成字符串,然后按照ASC码进行排序,这个大家都能理解,但如果数组元素是一个Object呢,转不了字符串,难道不能进行排序?答案 ...

  7. javascript array sort()

    [5,10,1].sort(); 结果[1,10,5] 有点出人意料. array.sort( sortFunction )可选-指定如何比较元素顺序的函数名称 如果省略sortFunction参数, ...

  8. javascript的sort()方法

    定义和用法: sort() 方法用于对数组的元素进行排序. 语法: 1 arrayObject.sort(sortby) 描述: sortby    可选.必须是函数.规定排序顺序  . 返回值: 对 ...

  9. 自己编写JavaScript的sort函数

    在平常开发中我们经常会遇到对数组进行排序的场景,js给我们提供了sort方法可以对数组元素进行排序,默认是按ASCII字母表顺序排序,请看下面例子: var a = [1, 3, 2, 4];var ...

随机推荐

  1. Chocolate&&木块拼接&&Cards&& Wet Shark and Bishops

    B. Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  2. BZOJ-1923-外星千足虫-SDOI2010

    描写叙述 分析 首先看上去这貌似是一个高斯消元的题目, 直觉吧- 每次给出的就相当于是一个方程. 然后非常easy想到n条虫子n个x, x_i的系数为0表示这个方程中没有i, 否则为1. 然后系数乘以 ...

  3. android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]

    http://blog.csdn.net/jj120522/article/details/8095852 示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这 ...

  4. BZOJ 2186 SDOI2008 沙拉公主的困惑 数论

    题目大意:给定询问组数T和取模数P,每次询问给定两个整数n和m,求1~(n!)的数中与m!互质的数个个数模P (m<=n) 首先T<=1W,暴力肯定过不去,我们须要预处理一些东西 首先我们 ...

  5. WindowsService服务的C#实现

    WindowsService(简称服务,下同)是目前做客户端软件后台运行功能的非常好的选择,本文基本解决了服务的创建和编写,代码控制服务的安装.卸载.启动.停止等,为服务传递参数,其他注意事项等 1. ...

  6. sql server存储过程分页

    Create PROCEDURE [dbo].[Table_GetList] ) = '', -- 查询条件(注意: 不要加 WHERE) ) = '', -- 设置排序 , -- 页尺寸 , -- ...

  7. utf8+bom格式保存php curl乱码问题

    今天开发遇到一个php curl取数据乱码问题 不是gzip也不是编码设置问题 最后有一同事判断为utf8+bom保存数据原因,懒得深入了解utf8+bom,仅做记录 [root@centos5 ~] ...

  8. 通过url给action传中文参数乱码解决方案

    比如: http://localhost:8080/projectName/dutyCondition.action?admitstate=0&currentStep=我的博客 传到后台的时候 ...

  9. Linux下为何都是文件的理解

    所谓“文件”,就是在我们的电脑中,以实现某种功能.或某个软件的部分功能为目的而定义的一个单位. Linux都是以文件的形式存在,当我们访问某个文件(Linux中的文件有目录,连接,普通文本),由于Li ...

  10. java文本编辑器5

    package peng_jun; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.* ...