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. css案例学习之div与span的区别

    代码: <html> <head> <title>div 标记范例</title> <style type="text/css" ...

  2. poj1503---大数加法

    先讲一种错误的做法:WA了n次,大神一定帮我看一下//看到有说数组大小开到250,我改了之后还是不//思路是将arr这个数组的每一行附上输入的值,然后求每列所有数之和,当然进位 //maxlen记录这 ...

  3. Ubuntu 12.04下安装ibus中文输入法

    这是最完整的安装方法: ibu是一个框架,可以支持多种输入法,像是pinyin,五笔等. 1,安装ibus框架 终端输入以下命令: sudo apt-get install ibus ibus-clu ...

  4. heap creation

    There two methods to construct a heap from a unordered set of array. If a array has size n, it can b ...

  5. MFC_Office

    添加新项目,MFC应用程序 多个顶级文档,项目类型:Office,其他默认,点击下一步 复合文档支持:容器,右边都勾选,点击下一步 文件拓展名:c,全选,其他默认,点击下一步 数据库支持:无,其他默认 ...

  6. 改良版的SQL Service 通用存储过程分页

    上次写了通用存储过程.感觉还是有很大的BUG.就是条件不能参数画化.这个BUG可以说是致命的.但是我一直想在用什么方法能解决这个东西.其实我只是想写少量的代码来做更多的事情.我想能不能传集合给存储过程 ...

  7. 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3.5的详细分析及安装过程

           问题:在服务器(操作系统为Windows server 2012)上安装SQL Server 2012的过程中,安装停留在下图所示的界面上,显示”正在启用操作系统功能NetFx3”随后出 ...

  8. poj1995-快速幂取模

    #include<iostream> #define LL long long using namespace std; //快速幂算法 LL pow(LL a,LL b,int m){ ...

  9. Java 初始化字段方式和顺序

    Java 初始化字段方式和顺序: 类加载时直接初始化静态字段; 类加载时调用静态方法初始化静态字段; 实例化对象时,在调用构造函数之前代码块中初始化字段; 实例化对象时,在调用构造函数之时初始化字段; ...

  10. leetcode Divide Two Integers python

    class Solution(object): def divide(self, dividend, divisor): """ :type dividend: int ...