我们知道JavaScript中sort()是排序用的,比如:
var months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
sort()的语法是:
arr.sort([compareFunction])
就是,我们可以指定排序函数(可选),如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。
如果指明了compareFunction,那么数组会按照调用该函数的返回值排序。
对包含数字的数组排序,比较函数一般这么写:
function compareNumbers(a, b) {
return a - b;
}
然后,我很不理解,这到底是要升序还是要降序呢?
MDN web docs上的解释是:
如果 compareFunction(a, b)小于0 ,那么a会被排列到b之前;
如果 compareFunction(a, b)等于0 ,a和b的相对位置不变。
如果 compareFunction(a, b)大于0 ,b会被排列到a之前。
我的问题是:
1. a和b指的是什么?
2. a-b小于0则a在前,那么不就是“小的数在前”吗?这不就一直是要升序吗?怎么实现降序呢?
然后我发现,这么写可以实现降序:
function compareNumbers(a, b) {
return b - a;
}
还是有点糊涂,是不是说:compareFunction的结果小于0,则第一个参数排在前面,而导致结果的规则由你定义。
之后,写了一个测试程序:
var array = [3, 2, 1, 9, 0, 5];
var test = array.sort(function(a, b){
console.log('array: ', JSON.stringify(array), '------ a: ', a, '------ b: ', b );
return a - b;
});
console.log('\n');
for (let i=0; i<array.length; i++) {
console.log(array[i]);
}
中间过程和最后结果为:
你明白了吗?