目录
概要
Javascript数组排序方法有两个:reverse()
和sort()方法
1、reverse()
可将数组进行倒序
2、sort()
可将数组项灵活地进行升序或降序排列
一、reverse()方法
通过一个简单的示例来说明一下reverse()方法
var arr = [6,5,7,9,2];
console.log(arr.reverse()); // 使用reverse()后对数组进行反序即[2, 9, 7, 5, 6]
console.log(arr); //输出结果为 [2, 9, 7, 5, 6]
通过以上示例可以看出,reverse()
会直接改变原数组,并返回倒序后的数组。
二、sort()方法
在javascript中sort()方法的排序可以传参和不传参两种,接下来通过示例来详细看一下
1.不传参数
var arr = [6,5,7,9,2];
console.log(arr.sort()); // 使用sort()后对数组进行升序即 [2, 5, 6, 7, 9]
console.log(arr); //输出结果为 [2, 5, 6, 7, 9]
通过以上示例可以看出,sort()
不传参数时会按升序方式对数组项进行排序,并返回排序后的数组
接下来再看一个示例
var arr = [6,50,17,9,22];
console.log(arr.sort()); // 使用sort()后对数组进行升序即 [17, 22, 50, 6, 9]
console.log(arr); //输出结果为 [17, 22, 50, 6, 9]
看到上面的这个示例,你会觉得排序和想象中的不一致,最终返回的不应该是[6, 9, 17, 22, 50]么?事实上却返回了[17, 22, 50, 6, 9],这到底是什么原因呢?
具体原因是,sort()
并不是按照数值进行排序,而是按字符串的ASCII码值进行比较排序的,所以当数组项为数字时,sort()首先会
自动将数字转换成字符串,然后再按字母比较的规则进行排序处理。
现在我们再回头看看前面两个例子。当arr
为[6,5,7,9,2]
时,数组每一项转换成字符串后进行排序的结果正好与数字排序结果相同;而当arr
为[6,50,17,9,22]
时,数组每一项转换成字符串后就得按顺序一位一位进行比较,在升序排序时,“17”应该排在最前面,因为“17”的第一位是“1”,比数组中其它值的ASCII码值都要小。
所以,在实际开发中很少会使用这种排序方式,在排序中使用最多的就是数字排序。那么如何正确地使用sort()
来达到预期的效果呢?
接来下介绍一下sort()的
传参
2.传入参数
在这里传入的参数是一个匿名函数作为参数,其实传入的函数功能很简单,就是告诉sort()
排序方式到底是升序还是降序,这里是已数字作为实例来进行的排序。废话不多说直接上代码
var arr = [6,50,17,9,22];
//升序的方法
console.log(arr.sort((x,y)=>{
return x - y;
})); // 返回 [6, 9, 17, 22, 50]
//降序的方法
console.log(arr.sort((x,y)=>{
return y - x;
})); //返回 [50, 22, 17, 9, 6]
上述实例就是在浏览器控制台执行后的输出结果。
当sort()
传入匿名函数后,第一个参数x位于第二个参数y之前,则返回一个负数,相等则返回0,x位于y之后则返回正数。
当升序时,前面的数肯定比后面的数小,所以传入的这个匿名函数的返回值要是个负数,因此函数参数返回x - y
。
反之降序时,匿名函数返回值是一个正数,因此函数返回y-x
小结
sort() 不传参时默认为升序,按字符串ASCII值比较的方式排序;传参时,其参数为函数,且该函数带俩参数
x和y,返回值 x - y 为升序,y - x为降序
reverse() 和 sort() 两函数均会改变原数组,且返回值同样也是改变后的数组