zoukankan      html  css  js  c++  java
  • Javascript 中 Array的 sort()和 compare()方法

    Javascript 中 Array的 sort()方法其实是把要排序的内容转化为string(调用 toString()), 然后按照字符串的第一位 ascii 码先后顺序进行比较,不是数字。

    我们看看官方是怎么说的:

    arrayobj.sort(sortfunction)

    参数

    arrayObj

    必选项。任意 Array 对象。

    sortFunction

    可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。

    说明

    sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。

    如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:

    • 负值,如果所传递的第一个参数比第二个参数小。
    • 零,如果两个参数相等。
    • 正值,如果第一个参数比第二个参数大。
    <html>
      <head>
        <script type="text/javascript">
            var arr = [1,3, 25];
         arr.sort();
            alert(arr);
        </script>
      </head>
      <body>
      </body>
    </html>

    结果: 1,25,3

    那么怎么办呢?我们可以写一个 compare() 方法

    <html>
    <head>
    <script type="text/javascript">
        var arr = [ 1, 3, 25 ];
        arr.sort(compare); //函数名是对象的引用,所以只写名字就行。
        alert(arr);
        function compare(num1, num2) {
            var temp1 = parseInt(num1);
            var temp2 = parseInt(num2);
            if (temp1 < temp2) {
                return -1;
            } else if (temp1 == temp2) {
                return 0;
            } else {
                return 1;
            }
        }
    </script>
    </head>
    <body>
    </body>
    </html>

     结果: 1,3,25

    我们可以把上面代码改写成匿名类的方式:

    <html>
    <head>
    <script type="text/javascript">
        var arr = [ 1, 3, 25 ];
        arr.sort(function (num1, num2)
            {
                var temp1 = parseInt(num1);
                var temp2 = parseInt(num2);
                if (temp1 < temp2) {
                    return -1;
                } else if (temp1 == temp2) {
                    return 0;
                } else {
                    return 1;
                }
            }
        )
        alert(arr);
    </script>
    </head>
    <body>
    </body>
    </html>

    结果一样: 1,3, 25

    范例:给定一个list,元素都是正整数,要求返回这些元素组成的最大数。例如【5,3,31,2】,返回53312

    function(i){
    return +(i.sort(compare).join(''))
    }
    
    function compare(a,b){
        var as=a+'',bs=b+'';
        return (bs+as) -(as+bs);
    }

    参考:http://www.cnblogs.com/backpacker/archive/2012/08/02/2619200.html

  • 相关阅读:
    Centos warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
    gitlab安装与配置(Centos6.8)
    重装MAC系统 “安装器有效负载签名检查失败” 解决方法
    nginx配置限制同一个ip的访问频率
    nginx配置文件详解
    C# 获取打印机列表以及串口
    JQ将数组转换为Json
    快速查看SQL Server 中各表的数据量以及占用空间大小
    键盘unicode值对照表
    JavaScript经典代码【二】【javascript判断用户点了鼠标左键还是右键】
  • 原文地址:https://www.cnblogs.com/DaBing0806/p/4808832.html
Copyright © 2011-2022 走看看