sort()方法
sort()會(huì)按照升序重新排列數(shù)組元素,即最小的值在前面,最大的值在后面為此,
sort()會(huì)在每一項(xiàng)上調(diào)用String()轉(zhuǎn)型函數(shù),然后比較字符串來決定順序。即使數(shù)組的元素都是數(shù)值,也會(huì)先把數(shù)組轉(zhuǎn)換為字符串再比較、排序。
let values = [0,1,5,10,15]
values.sort();
console.log(values);//0,1,10,15,5
為了更好的解決排序問題,sort()方法可以接收一個(gè)比較函數(shù)。
比較函數(shù)接收兩個(gè)參數(shù):
- 如果第一個(gè)參數(shù)應(yīng)該排在第二個(gè)參數(shù)前面,就返回負(fù)值;
- 如果兩個(gè)參數(shù)相等,就返回0;
- 如果第一個(gè)參數(shù)應(yīng)該排在第二個(gè)參數(shù)后面,就返回正值。
//升序,把返回值改下就能實(shí)現(xiàn)降序
function compare(value1,value2){
//第一個(gè)形參value1代表的實(shí)參始終在value2所代表的后面
console.log(value1)//1,5,10,15
console.log(value2)//0,1,5,10
if(value1 < value2){
return -1
}else if(value1 > value2){
return 1;
}else{
return 0
}
}
let values = [0,1,5,10,15]
values.sort(compare);
console.log(values);//0,1,5,10,15
#OR
values.sort((a,b) => a < b ? 1 : a > b ? -1 : 0)
console.log(values)://15,10,5,1,0
#OR
function compare(value1,value2){
//升序
return value1 - value2
//降序
// return value2 - value1
}
let values = [0,1,5,10,15]
console.log(values.sort(compare))//[0,1,5,10,15]
我的理解
sort方法第一個(gè)參數(shù)是函數(shù),其實(shí)是一個(gè)回調(diào)函數(shù),回調(diào)函數(shù)有兩個(gè)參數(shù):
第一個(gè)形參數(shù)所代表的實(shí)參始終在第二個(gè)形參代表的實(shí)參的后面
所以應(yīng)該這樣理解,value1 < value2比較的就是目標(biāo)數(shù)組中后一個(gè)數(shù)是否比前一個(gè)數(shù)小,如果判定為false,那么return -1,(value1 > value2的判定為true,return 1;其他情況return 0)就能實(shí)現(xiàn)目標(biāo)數(shù)組升序;如果判定為true,那么return 1就能實(shí)現(xiàn)目標(biāo)數(shù)組的降序。
function compare(value1,value2){
console.log(value1)//2,4,3,9,6
console.log(value2)//1,2,4,3,9
if(value1 < value2){
//升序
return -1;
#OR
//降序
return 1;
}else if(value1 > value2){
//升序
return 1;
#OR
//降序
return -1;
}else{
return 0
}
}
let data = [
1,2,4,3,9,6
];
data.sort(compare);
參考資料:
《javaScript高級(jí)程序設(shè)計(jì)第四版》
菜鳥教程