• 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

  • 相关阅读:
    【2019牛客暑期多校第三场】J题LRU management
    【2019多校第一场补题 / HDU6582】2019多校第一场E题1005Path——最短路径+网络流
    【bzoj2049】[Sdoi2008]Cave 洞穴勘测——线段树上bfs求可撤销并查集
    《DSP using MATLAB》Problem 8.36
    《DSP using MATLAB》Problem 8.35
    《DSP using MATLAB》Problem 8.34
    《DSP using MATLAB》Problem 8.33
    《DSP using MATLAB》Problem 8.32
    《DSP using MATLAB》Problem 8.31
    《DSP using MATLAB》Problem 8.30
  • 原文地址:https://www.cnblogs.com/DaBing0806/p/4808832.html
Copyright © 2020-2023  润新知