首页 > 编程笔记

JS数组排序:sort()方法

JavaScript 数组中提供了 sort() 方法用于排序,还提供了 reverse() 方法用于反转数组的顺序。

JS sort() 方法

对数组排序使用 sort() 方法,它会把数组进行原地排序,然后返回排序后的数组,它与原数组是同一个数组。

如果没有给 sort() 传递参数,则会把元素转换成字符串,按字符串的 UTF-16 代码点进行升序排列,所以要注意数字类型的元素可能会跟预期结果不同,因为数字被转换成了字符串进行比较,代码如下:
["apple","banana","car","app"].sort();  //["app","apple","banana","car"]
[82,71,99,4,10,120].sort();   //[10,120,4,71,82,99]
可以看到第2个数组中,数字并没有按正常顺序排序,如果要对数字进行排序,则可以给 sort() 传递一个回调函数,回调函数接收两个参数,即两个需要比较的元素,假设第1个参数名为 a,第2个为 b:
请看下面的代码:
[82,71,99,4,10,120].sort((a,b)=>{
    if(a>b)return 1;
    if(a<b)return-1;
    if(a===b)return 0;
}); //[4,10,71,82,99,120]
上方的代码可以简写成的代码如下:
[82,71,99,4,10,120].sort((a,b)=>a-b);
因为当 a<b 时,a-b 一定是负数,当 a>b 时,a-b 肯定为正数,而当 a=b 时,结果为 0,这样就满足了正序排列的条件。如果要倒序排列数组,则可以返回 b-a。

要注意的是不同的 JavaScrip t引擎(浏览器或 Node.js)对于 sort() 的实现方法不同,有的可能是快速排序,有的可能是归并排序,对于排序的时间复杂度或空间复杂度是不确定的,也就是说不能保证它的性能。

JS reverse() 方法

如果想反转一个数组,即最后一个元素作为第1个元素,倒数第2个元素作为第2个元素,以此类推,则可以使用 reverse() 方法,它会原地反转数组并返回反转后的原数组,与 sort() 一样会修改原数组,代码如下:
["h","e","l","l","o"].reverse();  //["o","l","l","e","h"]

推荐阅读