• 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

  • 相关阅读:
    Java学习第七周汇报
    Java暑期学习第四十三天日报
    Java暑期学习第四十七天日报
    Java学习第六周汇报
    SQL server数据库优化
    c#在WinForm中重写ProgressBar控件(带%的显示)
    javascript事件处理在IE和FireFox中的区别
    c# winform 关于DataGridView的一些操作
    JavaScript验证中文,特殊字符
    VB.NET与C#.NET比较
  • 原文地址:https://www.cnblogs.com/backpacker/p/2619200.html
Copyright © 2020-2023  润新知