sort() 方法用于对数组的元素进行排序。
语法:
参数:
sortby 可选。规定排序顺序。必须是函数。
返回值:
对数组的引用。请注意,数组在原数组上进行排序,不生成副本。
下面的排序都用到了sort,分为几种情况来介绍
1、普通字符串数组
直接调用sort就可以实现排序
var arr = ["张三", "李四", "王麻子", "小二", "陈晨", "陈阳"]
arr.sort()
结果如下:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcukTN0EDO0gTM5ITMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2、普通数值数组
如果直接使用sort()排序会有问题,你会发现5排在最后了,如图:
这是因为sortby这个参数省略的话,那么数组中的元素将按照ASCII字符顺序进行排序,而5的ASCII比较大,就会出现这种情况
这里我们可以使用sortby参数实现排序
function sortNumber(a,b)
{
return a - b
}
arr.sort(sortNumber)
结果:
说明:
sortNumber对传入的一对值进行比较,然后返回的的值为:小于0,大于0,等于0;(大于0交换位置,反之则不)
- 当小于0时,说明b>a,故b的排序靠后(即不变).
- 当大于0时,说明a>b,故a的排序靠后.
- 当等于0时,说明a=b,故不改变排序.
如果对数值数组的值进行降序排序。那么只要把返回的值改为 b-a 即可
json数组
var arr = [{
name: "张三",
age: 20
}, {
name: "李四",
age: 25
}, {
name: "王麻子",
age: 32
}, {
name: "小二",
age: 18
}, {
name: "陈晨",
age: 27
}, {
name: "陈阳",
age: 20
}]
3、json数组按数值字段排序
arr.sort(function(a,b){
return a.age-b.age
})
利用sortby参数去判断一对值得age大小,原理同普通数值数组,结果如下:
4、json数组按字符串字段排序
字符串不能根据a-b来判断大小了,这里用到了localeCompare
arr.sort(function(a,b){
return a.name.localeCompare(b.name)
})
结果如下:
localeCompare的用法
localeCompare是用本地特定的顺序来比较两个字符串。
语法:
参数:
target 要以本地特定的顺序与 stringObject 进行比较的字符串。
返回值:
说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。