详解数组根据数组对象里面的字段进行排序

    在工作中遇到的问题有很多,今天遇到一个比较有意思的问题。需求如下,后台返回了中国所城市的对象,然而并没有排序,直接给返回了。在前端显示的时候需要做一个排序显示,要按照城市的首字母显示。

    后台给的数据大致如下:

var aa = [
    {
        name:'赣州',
        initial:'g'
    },{
        name:'黄山',
        initial:'h'
    },{
        name:'青岛',
        initial:'q'
    },{					
        name:'安徽',
        initial:'a'
    },{					
        name:'北京',
        initial:'b'
    }
]

    现在对数组里面的对象进行排序,有2种方法(当然还有更多,大家可以自己想想),一种是改造 array对象的sort方法另外一种是通过冒泡排序实现。

    一、通过sort方法来实现

    大家可能在初学数组的时候都了解并使用过sort()方法,但是普通的sort()方法显然无法解决上面场景所遇到的问题。

    sort()方法使用是可以不传参数,也可传递参数sort(sortby),至于参数里面应该传什么值呢?其实就是一个function,就是用来解决排序的function。

    如果有朋友对sort(sortby)这个sortby函数不了的话,建议去w3c上看看,讲真的,只要认真看了,应该都能懂,如果不懂,也可以结合我下面附上的代码的注释一起研究。在此附上链接 http://www.w3school.com.cn/js/jsref_sort.asp。以下是详细代码:

var aa = [
    {
        name:'赣州',
        initial:'g'
    },{
        name:'黄山',
        initial:'h'
    },{
        name:'青岛',
        initial:'q'
    },{					
        name:'安徽',
        initial:'a'
    },{					
        name:'北京',
        initial:'b'
    }
]

function ownSort(a,b){
    //通过比较ab对象的initial 来确认返回的是0还是大于0的书
    if(a.initial <= b.initial){
        //如果a对象的initial小于并等于b对象,那么a对象就应该b对象的前面,所以返回0
        return 0;
    }else{
        //如果b.initial要小于a.initial,那么b对象应该在a对象的前面,所以返回大于0的数字
        return 1;
    }
}

aa.sort(ownSort);
console.log(aa);

  二、通过冒泡排序实现

    相比起上面通过sort(sortby)来实现,个人认为使用冒泡排序也是一可行的解决方案,不对相对于资源的耗费,冒泡排序还是会比上面的方法要高。

    冒泡排序相信大家都接触过,如果没有接触过应该也听说过,理论并不复杂,如果有还不了解的朋友,我这也给大家附上一个地址:https://blog.csdn.net/qq_34483204/article/details/70751929,可能刚开始理解起来有点复杂,不过结合代码去看,会简单很多。

    废话不多说,以下是通过冒泡排序的算法去实现的,如果不清楚的朋友,请了解下冒泡排序:    

var aa = [
    {
        name:'赣州',
        initial:'g'
    },{
        name:'黄山',
        initial:'h'
    },{
        name:'青岛',
        initial:'q'
    },{					
        name:'安徽',
        initial:'a'
    },{					
        name:'北京',
        initial:'b'
    }
]

function sortarr(arr){
    for(i=0;i<arr.length-1;i++){
        for(j=0;j<arr.length-1-i;j++){
            /**
             * 比较第j位和j+1的initial值
             * 如果j位的initial值比j+1位的initial值大,那么他们的位置发生交换
             * 如果j位的initial值比j+1位的initial值小,那么位置不变
             */
            if(arr[j].initial > arr[j+1].initial){
                var temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
    return arr;
}

console.log(sortarr(aa));

猜你喜欢

转载自blog.csdn.net/qq_33183172/article/details/81462955
今日推荐