关于sort()函数排序问题的解决

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

问题:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序

比如:[‘1’,’41’,’4’,’10’]

排序的结果为:[‘1’,’10’,’4’,’41’]

他是按照字母顺序进行排序,所以会出现这个问题

W3C上有这么一句话:

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

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

  • 若 a 等于 b,则返回 0。

  • 若 a 大于 b,则返回一个大于 0 的值。

1
2
3
4
5
6
var arr = ['1','10','4','41'];
function sortNumber(a,b){
return a-b
}

arr.sort(sortnumber);

另外还有一种数组对象的进行按字段排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var arr =[
{name:'lee',age:32},
{name:'wang',age:30},
{name:'zhang',age:21},
{name:'xiao',age:45}
]
/**
* array[数组]
* key[string] 通过什么字段进行排序
* order[number] 1从大到小,-1或者不传 从小到大
*/
function sortByKey(array,key){
if(!order || order == -1){
return array.sort(function(a,b){
var x=parseInt(a[key]);
var y=parseInt(b[key]);
return ((x<y)?-1:((x>y)?1:0));
});
}else if(order == 1){
return array.sort(function(a,b){
var x=parseInt(a[key]);
var y=parseInt(b[key]);
return ((x>y)?-1:((x<y)?1:0));
});
}
}

var newArr = sortByKey(arr,'age')

如果对您有所帮助或者对博主有更多的话说,欢迎你去我的GitHub留下一个您的start和issues

前往LEE的github给他一个Start鼓励一下吧