作为程序员,大家对数组并不陌生,对于js中数组的sort()方法你了解多少呢? 下面咱们分析下sort()方法:
示例1:
var arr = [1,11,2,44,99,112];
arr = arr.sort();
alert(arr);
运行后的结果:[1,11,112,2,44,99];
是不是很意外,与想象中的[1,2,11,44,99,112]不同呢?
为什么呢?因为sort默认是按第一个数字比较,相同再按第二个数组比较,以此类推那如何实现数字大小的正常排序呢?
sort()方法可以接受一个函数参数来实现数字的大小比较
示例2:
var arr = [1,11,2,44,99,112];
arr = arr.sort(function(n1,n2){ if(n1>n2){ return 1; }else{ return 0; } });
alert(arr);
运行后结果:[1,2,11,44,99,112] 这次就正常了。
或许你会有疑问,sort()方法函数中的return后面的-1;1;0是什么意思,为什么要用-1、1、0不用其他的呢?
回答:其实当n1>n2只要返回正数即可,0不能变。
因此根据这个疑问,我们可以改进一下sort()方法的参数函数的写法
示例3:
var arr = [1,11,2,44,99,112];
arr = arr.sort(function(n1,n2){ return n1-n2; });
alert(arr);
运行后结果:[1,2,11,44,99,112]
这种改进看明白了吗?
示例1:
var arr = [1,11,2,44,99,112];
arr = arr.sort();
alert(arr);
运行后的结果:[1,11,112,2,44,99];
是不是很意外,与想象中的[1,2,11,44,99,112]不同呢?
为什么呢?因为sort默认是按第一个数字比较,相同再按第二个数组比较,以此类推那如何实现数字大小的正常排序呢?
sort()方法可以接受一个函数参数来实现数字的大小比较
示例2:
var arr = [1,11,2,44,99,112];
arr = arr.sort(function(n1,n2){ if(n1>n2){ return 1; }else{ return 0; } });
alert(arr);
运行后结果:[1,2,11,44,99,112] 这次就正常了。
或许你会有疑问,sort()方法函数中的return后面的-1;1;0是什么意思,为什么要用-1、1、0不用其他的呢?
回答:其实当n1>n2只要返回正数即可,0不能变。
因此根据这个疑问,我们可以改进一下sort()方法的参数函数的写法
示例3:
var arr = [1,11,2,44,99,112];
arr = arr.sort(function(n1,n2){ return n1-n2; });
alert(arr);
运行后结果:[1,2,11,44,99,112]
这种改进看明白了吗?