在工作中遇到的问题有很多,今天遇到一个比较有意思的问题。需求如下,后台返回了中国所城市的对象,然而并没有排序,直接给返回了。在前端显示的时候需要做一个排序显示,要按照城市的首字母显示。
后台给的数据大致如下:
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[j+1].initial){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr;
}
console.log(sortarr(aa));