javascript 数组进行排序,需要借助sort()方法和reverse()方法,以实现对数组进行排序操作和逆序操作。
其中:
1、javascript的sort()中如果没有指定比较函数,则默认会按照字符的编码顺序进行升序排序。也就是说如果我们想要对数值进行排序得到的不一定是我们想要的结果。
2、javascript的reverse()将数组中的元素逆序。
第一点,如果有一个数组arr=[1,6,3,7,9],使用arr.sort()后,数组的顺序为1,3,6,7,9,得到了我们想要的结果。
一个数组排序:arr=[3,1,16,34,30],如果执行arr.sort()后是不是还是会得到我们想要的1,3,16,30,34呢?
执行结果为:1,16,3,30,34
实际上,sort方法将上面的数值按照字符串方式排序了,也就是说和数组arr1=['3','1','16','34','30']的排序结果一致。
例子:
如果想要得到正确的结果:1,3,16,30,34,应该如何操作?
javascript手册中的说明:
定义和用法
sort() 方法用于对数组的元素进行排序。
语法
arrayObject.sort(sortby)
参数 描述
sortby 可选。规定排序顺序。必须是函数。
返回值
对数组的引用。请注意,数组在原数组上进行排序,不生成副本。
说明
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
如果要按照数值进行排序,那么就要提供一个比较函数。
一般常见的比较函数如下:
精简版的两种形式:
然后执行arr.sort(sortArr),可以得到结果:1,3,16,30,34。
即可以将数组按照整型数值进行了升序排序。
若想要对数组进行降序排序,应该如何操作?
一种思路是:改变sortArr函数的返回值,如果m<n时返回正直,m>n时返回负值,m=n时返回0。
可以写两个函数,一个升序,一个降序。然后根据不同的需要调用不同的函数就可以了。
此外,还可以调用上面提到的另一个函数reverse()来轻松的实现,当进行升序排序后,然后数组在调用reverse()方法将数组逆序,即可实现数组的降序排序了。
例子:
以上介绍了Javascript中数组的排序,由于默认按照字符串排序,要实现按照其他形式的规则排序,需要自己定义比较函数才可以。