JS sort的爱恨情仇

一:数组的排序

数组排序方法为sort( ),

默认情况下,sort()方法将按字母和升序将值作为字符串进行排序。即数组里就算装的都是数字,也会被转换成字符串再排序。

正因为如此,sort() 方法在对数字进行排序时会产生不正确的结果。

我们需要通过提供“比较函数”来解决此问题,即给sort传入一个自定义的比较函数。初学JS时,理解不了为啥要传一个我看不太懂的函数,而且总是记不住该函数咋写。

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){
    return b-a;     // 按降序对数组中的数字进行排序
});    

因为初学时看着这样使用看着别扭,养成个习惯。每次需要给数组排序时,自己写个函数。傻乎乎的不知疲惫,使用大学课堂上学的循化里循环(冒泡排序)。

function mySort(arr){
    for(let i=0;i<arr.length;i++){
        for(let a=i+1;a<arr.length;a++){
            if(arr[i] < arr[a]){
                let test = arr[a];
                arr[a] = arr[i];
                arr[i] = test;
    return arr;
var points = [40, 100, 1, 5, 25, 10];
mySort(points);  // 返回 [100, 40, 25, 10, 5, 1]

后来JS写的多了,不再觉得sort使用比较函数晦涩难懂。虽然现在依旧不知道为啥传入这样一个函数,但是内心已被:“人家sort函数就是这样定义的,按传参要求传就行了“ 理念打败。

二:对象数组的排序

工作后,经常需要给从接口返回来的装满对象的数组,根据对象某个字段排序。知道昨天我还是下意识的按照上面循环里套循环来处理,但是团队协作让我觉得这样写太low。感觉别人会觉得我是个傻子

于是开始使用sort的原生用法,简便快捷,与大家的编程习惯一致

var points = [
    {name:'qq',age: 5},
    {name:'ali',age: 15},
    {name:'didi',age: 11},
    {name:'zijie',age: 96},