排序作為比較常用的一個功能會在日常業務場景上得到很廣泛的應用,在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"]:
可以根據需求來定制自己的排序方法