sort对数组排序问题的顺序问题

前言:

由于自己学习不深入,之前以为sort能够直接对数组进行排序,最起码纯数值的应该是可以的,但是后来在实操时发现,结果并不正确,例如:

let arr = [4,1,5,3,6,8,1,99,23];

// 我的想象中是酱紫的
// [ 1, 1, 3, 4, 5, 6, 8, 23, 99 ]
// 但是实际上是酱紫的
console.log(arr.sort());  // [ 1, 1, 23, 3, 4, 5, 6, 8, 99 ]

这就是我自己的一个误区,所以在这总结一下,希望大家不要入坑。

sort方法是用来对数组的元素进行排序的,写法是:

arrayObject.sort(sortby)

其中sortby是选写的,用来规定排序顺序(必须是函数),而且该方法是在原数组上进行排序,直接修改了原来的数组。

1、无sortby:按照字符编码的顺序进行排序 

2、有sortby:该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

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

下面是一个 sortby规则函数的例子(从小到大的顺序),适用于大多数数据类型(具体的我也还没试......):

function compare (value1, value2) {
    if(value1 < value2) {
        return -1;
    } else if (value1 > value2) {
        return 1;
    } else {
        return 0;
    }
}

若数组中全是数字,则更简单,只需要将两个值相减(从小到大):

function simpleCompare (value1, value2) {
    return value1 - value2;
}

应用:

let arr =  [1,'adc',1,2,4,'a',34,8,56,0,'gg'];
let arrNum = [4,1,5,3,6,8,1,99,23];


console.log(arr.sort(compare));  // [ 'a', 0, 1, 1, 'adc', 2, 4, 8, 34, 56, 'gg' ]
console.log(arrNum.sort(simpleCompare));   // [ 1, 1, 3, 4, 5, 6, 8, 23, 99 ]

猜你喜欢

转载自blog.csdn.net/DZY_12/article/details/107567201