前几天在写逻辑的时候,又遇到了数组对象的排序问题,因此今天闲着无事就全面的总结一下sort()函数的用法。下面我将从以下方面来进行介绍。
首先在默认情况下,sort()方法按升序排列数组项---即最小的值位于最勤勉,最大的值排在最后面。为了实现排序,sort()方法会调用每个数组想的toString()转型方法,然后比较得到的字符串,即使数组中的每一项都是数值,sort()方法比较的也是字符串。所以以下数组会返回看似不正确的排序。
var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //0,1,10,15,5
一:单纯的进行数字比较已确定如何排序。
逻辑:① 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
② 若 a 等于 b,则返回 0。
③ 若 a 大于 b,则返回一个大于 0 的值
代码如下
function ascNum(a,b)
{
return a - b;
}
function descNum(a,b)
{
return b - a;
}
var arr = new Array( 3600, 5010, 10100, 801);
arr.sort(ascNum); //801,3600,5010,10100
console.log(arr);
arr.sort(descNum);
console.log(arr); //10100,5010,3600,801,
二:数组对象进行排序。
逻辑:① 获取到数组对象的某一个值进行比较。
② 原理同第一点
function sortByKey(array,key){
return array.sort(function(a,b){
var x=a[key];
var y=b[key];
return ((x<y)?-1:((x>y)?1:0));
});
}
var obj = [
{age:30,name:'yan'},
{age:19,name:'ma'},
{age:20,name:'zhang'},
]
obj.sort(obj,'age');
console.log(obj)// [{age:19,name:'ma'},{age:20,name:'zhang'},{age:30,name:'yan'}]
如有不对的地方欢迎指正出来~