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.返回顶部
 
11.返回顶部
 
本文转自ylbtech博客园博客,原文链接:http://www.cnblogs.com/ylbtech/p/8087747.html ,如需转载请自行联系原作者
相关文章
|
3天前
|
JSON JavaScript 前端开发
【JavaScript技术专栏】JavaScript的跨域通信方法
【4月更文挑战第30天】本文探讨了JavaScript中的跨域通信方法,包括:同源策略和跨域通信的概念,以及JSONP、CORS、WebSockets、`window.postMessage()`、代理服务器和WebAssembly的使用。这些技术各有优劣,适用于不同的场景,是Web开发者解决跨域问题的关键工具。随着Web技术的演进,跨域通信的解决方案也将不断更新。
|
1天前
|
JavaScript
Vue.js 中父组件调用子组件的方法
Vue.js 中父组件调用子组件的方法
11 2
|
1天前
|
JavaScript 前端开发 API
Vue.js 中子组件向父组件传值的方法
Vue.js 中子组件向父组件传值的方法
12 2
|
4天前
|
存储 JavaScript 前端开发
javascript中字符串处理,常用的方法汇总
javascript中字符串处理,常用的方法汇总
|
4天前
|
JavaScript 前端开发 索引
JavaScript 数组的索引方法数组转换为字符串方法
JavaScript 数组的索引方法数组转换为字符串方法
|
4天前
|
JavaScript 前端开发
11.JavaScript 事件的概念以及绑定方法
11.JavaScript 事件的概念以及绑定方法
|
4天前
|
前端开发 JavaScript
【Web 前端】JS继承的方法有哪些?
【4月更文挑战第22天】【Web 前端】JS继承的方法有哪些?
|
7天前
|
JavaScript 前端开发
js操作字符串的相关方法
js操作字符串的相关方法
9 3
|
7天前
|
JavaScript 前端开发
js 操作数组的方法
js 操作数组的方法
18 4
|
7天前
|
存储 JavaScript 前端开发
js原生方法,获取url上面所有参数,并返回一个对象
JavaScript函数`getUrlParameters`用于从URL中提取所有参数并返回一个键值对对象。它接收URL,分割查询字符串,解码参数对,并存储在对象中。重复参数键会被存储为数组。