sort()很奇怪

我们知道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]);
}

中间过程和最后结果为:

你明白了吗?


#扩展知识推荐

js中sort函数的底层实现机制?
聊聊前端排序的那些事

猜你喜欢

转载自blog.csdn.net/liminwang0311/article/details/88907408