JavaScript:sort() 方法

ylbtech-JavaScript:sort() 方法

 JavaScript sort() 方法

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

返回值

对数组的引用。请注意,数组在原数组上进行排序,不生成副本。

说明

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。
2. 实例 1返回顶部
例子 1
在本例中,我们将创建一个数组,并按字母顺序进行排序:
<script type="text/javascript">

var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"

document.write(arr + "<br />")
document.write(arr.sort())

</script>

输出:

George,John,Thomas,James,Adrew,Martin
Adrew,George,James,John,Martin,Thomas

例子 2

在本例中,我们将创建一个数组,并按字母顺序进行排序:

<script type="text/javascript">

    var arr = new Array(6)
    arr[0] = "10"
    arr[1] = "5"
    arr[2] = "40"
    arr[3] = "25"
    arr[4] = "1000"
    arr[5] = "1"

    document.write(arr + "<br />")
    document.write(arr.sort())

</script>

输出:

10,5,40,25,1000,1
1,10,1000,25,40,5

请注意,上面的代码没有按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:

<script type="text/javascript">

function sortNumber(a,b)
{
return a - b
}

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"

document.write(arr + "<br />")
document.write(arr.sort(sortNumber))

</script>

输出:

10,5,40,25,1000,1
1,5,10,25,40,1000

 

3. 实例 2返回顶部
例子 1
在本例中,我们将创建一个数组,并按字母顺序进行排序:
<script type="text/javascript">

    // by函数接受一个成员名字符串做为参数
    // 并返回一个可以用来对包含该成员的对象数组进行排序的比较函数
    var by = function (name) {
        return function (o, p) {
            var a, b;
            if (typeof o === "object" && typeof p === "object" && o && p) {
                a = o[name];
                b = p[name];
                if (a === b) {
                    return 0;
                }
                if (typeof a === typeof b) {
                    return a < b ? -1 : 1;
                }
                return typeof a < typeof b ? -1 : 1;
            }
            else {
                throw ("error");
            }
        }
    }

    // 数组
    var employees = []
    employees[0] = { name: "George", age: 32, retiredate: "March 12, 2014" }
    employees[1] = { name: "Edward", age: 17, retiredate: "June 2, 2023" }
    employees[2] = { name: "Christine", age: 58, retiredate: "December 20, 2036" }
    employees[3] = { name: "Sarah", age: 62, retiredate: "April 30, 2020" }

    // 排序
    employees.sort(by("age"));

    // 输出
    for (var i = 0; i < employees.length; i++)
    {
        document.writeln(employees[i].name + "," + employees[i].age + "," + employees[i].retiredate + "<br>");
    }
</script>

 输出:

Edward,17,June 2, 2023
George,32,March 12, 2014
Christine,58,December 20, 2036
Sarah,62,April 30, 2020

 例子 2

到这里,对象数组排序就算基本实现了。那如何实现多个键值排序呢?意思就是先是对age排序,如果age相同,再比较name。

这时,我们可以进一步修改by函数,让其可以接受第二个参数,当主要的键值产生一个匹配的时候,另一个compare方法将被调用以决出高下。

<script type="text/javascript">

    //by函数接受一个成员名字符串和一个可选的次要比较函数做为参数
    //并返回一个可以用来包含该成员的对象数组进行排序的比较函数
    //当o[age] 和 p[age] 相等时,次要比较函数被用来决出高下
    var by = function (name, minor) {
        return function (o, p) {
            var a, b;
            if (o && p && typeof o === 'object' && typeof p === 'object') {
                a = o[name];
                b = p[name];
                if (a === b) {
                    return typeof minor === 'function' ? minor(o, p) : 0;
                }
                if (typeof a === typeof b) {
                    return a < b ? -1 : 1;
                }
                return typeof a < typeof b ? -1 : 1;
            } else {
                thro("error");
            }
        }
    }

    // 数组
    var employees = []
    employees[0] = { name: "George", age: 32, retiredate: "March 12, 2014" }
    employees[1] = { name: "Edward", age: 17, retiredate: "June 2, 2023" }
    employees[2] = { name: "Christine", age: 58, retiredate: "December 20, 2036" }
    employees[3] = { name: "Sarah", age: 62, retiredate: "April 30, 2020" }

    // 排序
    employees.sort(by('age', by('name')));

    // 输出
    for (var i = 0; i < employees.length; i++)
    {
        document.writeln(employees[i].name + "," + employees[i].age + "," + employees[i].retiredate + "<br>");
    }
</script>

 输出:

Edward,17,June 2, 2023
George,32,March 12, 2014
Christine,58,December 20, 2036
Sarah,62,April 30, 2020

 

4.返回顶部
 
5.返回顶部
 
 
6.返回顶部
 
7.返回顶部
 
8.返回顶部
 
9.返回顶部
 
10.返回顶部
1-1、参考 1
1-2、
 
11.返回顶部
 
warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted on 2017-12-22 22:35  ylbtech  阅读(1621)  评论(0编辑  收藏  举报