排序作为比较常用的一个功能会在日常业务场景上得到很广泛的应用,在js中为我们提供了一个sort快速排序函数,下面来让我们复习一下他的用法。
首先,我们先创建一个数组
var array = [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
我们调用数组的sort方法
array.sort(); //结果是[1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9]
为什么会发生这种情况呢?是因为在排序中默认为字符串进行相互比较了,但是js中sort中的参数可以是一个函,我们来改造一下。
function comepare ( a, b ){
if ( a < b ){
return -1 ;
}
if( a > b ){
return 1 ;
}
return 0 ;
}
将我们写好的这个比较函数传入sort中,再来看一下结果
array.sort(compare); //结果是[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
这样结果就正确了。
还可以自定义排序,看下面代码
var friends = [
{name: 'John', age: 30},
{name: 'Ana', age: 20},
{name: 'Chris', age: 25}
];
function comparePerson(a, b){
if (a.age < b.age){
return -1
}
if (a.age > b.age){
return 1
}
return 0;
}
console.log(friends.sort(comparePerson));
/最后输出位Ana(20), Chris(25), John(30)
字符串排序
var names =['Ana', 'ana', 'john', 'John'];
console.log(names.sort());
输出结果是
["Ana", "John", "ana", "john"]
这个结果是因为JavaScript在做字符比较的时候,是根据字符对应的ASCII值来比较的。例如,A、J、a、j对应的ASCII值分别是65、75、7、106。
我们来修改一下
names.sort(function(a, b){
if (a.toLowerCase() < b.toLowerCase()){
return -1
}
if (a.toLowerCase() > b.toLowerCase()){
return 1
}
return 0;
});
输出结果为["Ana", "ana", "John","john"]:
可以根据需求来定制自己的排序方法