今天遇见一个问题。
var arr = [3,1,16,34,7,8];
arr.sort();
返回结果是[1,16,3,34,7,8]。和我想要取得的结果不同。
看了下接口说明。
arrayObject.sort(sortby).
sortby必须是函数。
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
看完后,用个函数试下。
升序
function ascend(a, b) {
return a-b;
}
降序
function desc(a, b) {
return b-a;
}
测试了下,升序arr.sort(ascend)和降序arr.sort(desc).都没问题。