天天看点

Jquery对普通数组和JSON数组的排序(包括字符串和数值)

sort() 方法用于对数组的元素进行排序。

语法:

参数:

sortby 可选。规定排序顺序。必须是函数。

返回值:

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

下面的排序都用到了sort,分为几种情况来介绍

1、普通字符串数组

直接调用sort就可以实现排序

var arr = ["张三", "李四", "王麻子", "小二", "陈晨", "陈阳"]

arr.sort()
           

结果如下:

Jquery对普通数组和JSON数组的排序(包括字符串和数值)

2、普通数值数组

如果直接使用sort()排序会有问题,你会发现5排在最后了,如图:

Jquery对普通数组和JSON数组的排序(包括字符串和数值)

这是因为sortby这个参数省略的话,那么数组中的元素将按照ASCII字符顺序进行排序,而5的ASCII比较大,就会出现这种情况

这里我们可以使用sortby参数实现排序

function sortNumber(a,b)
{
    return a - b
}
arr.sort(sortNumber)
           

结果:

Jquery对普通数组和JSON数组的排序(包括字符串和数值)

说明:

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大小,原理同普通数值数组,结果如下:

Jquery对普通数组和JSON数组的排序(包括字符串和数值)

4、json数组按字符串字段排序

字符串不能根据a-b来判断大小了,这里用到了localeCompare

arr.sort(function(a,b){
  return a.name.localeCompare(b.name)
})
           

结果如下:

Jquery对普通数组和JSON数组的排序(包括字符串和数值)

localeCompare的用法

localeCompare是用本地特定的顺序来比较两个字符串。

语法:

参数:

target 要以本地特定的顺序与 stringObject 进行比较的字符串。

返回值:

说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。