sort()

语法:arrayObject.sort(sortby)

sortby是一个参数,规定排序的顺序,必须是函数。

sort()的返回值是对该数组的引用,这里要注意的是,该排序方法会在原数组上直接进行排序,并不会生成一个排好序的新数组。

  • 默认排序:那么排序的时候将会按字母的顺序对数组中的元素进行排序,说精确点是按照字符编码的顺序进行排序。如果要实现这一点,首先应该把数组的元素都转化成字符串,以便进行比较。

  • 其他标准排序,那么就要传入参数sortby,即提供比较函数。该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

比较参数应该具有两个参数a和b,其返回值如下:

  • 若a小于b,在排序后的数组中,a应该出现在b之前,则返回一个小于0的值
  • 若a等于b,则返回0
  • 若a大于b,则返回一个大于0的值

我们先来看两个例子,第一个不传入参数sortby,代码如下:

var arr = ["Zhangsan""Lisi""Wangwu""Hanmei""Chendu"];
var res = arr.sort();
console.log(res);
// 打印结果为["Chendu", "Hanmei", "Lisi", "Wangwu", "Zhangsan"]

那么如果数组元素是数字呢?看如下代码:

var arr = [524, 684, 5, 69, 15];
var res = arr.sort();
console.log(res);
// 打印结果为[15, 5, 524, 684, 69]

由上面的代码可以看到,如果数组元素为数字的话,排序并不会按大小顺序排,而是会按数字的第一个字符排序。
如果我们想要这组数字按从小到大,或者从大到小的顺序排列的话,那么我们就需要传入参数sortby,即上文所说的比较函数。


var arr = [524, 684, 5, 69, 15];
var res = arr.sort((a, b) => {
console.log('sss', a, b)
return a - b;
});
console.log(res);
// 打印结果为[5, 15, 69, 524, 684]

上面代码中的sortNum就是一个比较函数,我们传入a,b两个值,然后返回a-b的值,跟据返回值进行大小排序,如果想要从大到小排序,只需要return b-a即可。

这里额外提一下reverse()这个方法,这个方法用于颠倒数组中元素的顺序。

这里要注意,只是颠倒,并不是按从大到小的顺序,因此我认为它算不上是排序方法。

语法:arrayObject.reverse()

代码如下:

var arr = [524, 684, 5, 69, 15];
var res = arr.reverse();
console.log(res);
// 打印结果为[15, 69, 5, 684, 524]

除了我们常用的sort()方法,其实还有其他很多方法可以实现排序:

  • 冒泡排序
  • 快速排序
  • 插入排序
  • 希尔排序
  • 选择排序(坑未填)
  • 归并排序(坑未填)
  • 堆排序(坑未填)

转载请标注原文地址