arrayObject.sort(sortby)
sort()对数组排序,不开辟新的内存,对原有数组元素进行调换
简单数组简单排序
var arrSimple=new Array(1,8,7,6);
arrSimple.sort();
注意:该方法不适用于两位以上,js默认比较函数把要排序的元素视为字符串,按字符串排序,不能在比较元素前先检测类型
var arr = [12,3,44,5];
console.log(arr.sort());
结果是 : [12, 3, 44, 5]
简单数组自定义排序
var arrSimple2=new Array(1,8,7,6);
arrSimple2.sort(function(a,b){
return b-a});
a,b表示数组中的任意两个元素,若return > 0 b前a后;reutrn < 0 a前b后;a=b时存在浏览器兼容
a-b输出从小到大排序,b-a输出从大到小排序
简单对象List自定义属性排序
var objectList = new Array();
function Persion(name,age){
this.name=name;
this.age=age;
}
objectList.push(new Persion('jack',20));
objectList.push(new Persion('tony',25));
objectList.push(new Persion('stone',26));
objectList.push(new Persion('mandy',23));
//按年龄从小到大排序
objectList.sort(function(a,b){
return a.age-b.age});
简单对象List对可编辑属性的排序
var objectList2 = new Array();
function WorkMate(name,age){
this.name=name;
var _age=age;
this.age=function(){
if(arguments.length)
{
_age=arguments[0];
return _age;
}
else
{
return _age;
}
}
}
objectList2.push(new WorkMate('jack',20));
objectList2.push(new WorkMate('tony',25));
objectList2.push(new WorkMate('stone',26));
objectList2.push(new WorkMate('mandy',23));
//按年龄从小到大排序
objectList2.sort(function(a,b){
return a.age()-b.age();
});
localeCompare()方法实现中文按照拼音排序
var array = ['武汉', '北京', '上海', '天津'];
array = array.sort(function compareFunction(item1, item2) {
return item1.localeCompare(item2,'zh');
});
//["北京", "上海", "天津", "武汉"]
//或者引入拼音库,把汉字先转成拼音再排序
字母、数字的混合排序
var d = [1,2,3,'a','k','b','d',10,20,'c']
d.sort(function(a,b){
var c = isFinite(a), // 如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。
d = isFinite(b);
return (c != d && d - c) || a > b;
})
console.log(d);
//[1, 2, 3, 10, 20, "a", "b", "c", "d", "k"]
//c != d && c - d 如果c和d不相等 ,也就是说比较的值不是同一类型。那就比较 c-d的值是1还是-1(中间进行了隐式类型转换)
//如果c == d 也就是说c、d是同一类型的值,c、d可能都是字母,也可能都是数字。这里就可以直接比较大小了(都是字母的话不能直接做减法)
按照字符串长度降序排序,等长的以相反的字母顺序(Z->A)排序
function lineupStudents(students){
var stu=students.split(" ");
stu.sort(function(a,b){
if(a.length==b.length){
return b.localeCompare(a);
}else{
return b.length-a.length;
}
});
console.log(stu);
}
//stringObject 小于 target,则 localeCompare() 返回小于 0 的数
//stringObject 大于 target,则该方法返回大于 0 的数
//两个字符串相等,或根据本地排序规则没有区别,该方法返回 0
//stringObj.localeCompare(target)中谁比较谁,决定了列表的升序还是降序
object数组,属性为字符
list.sort(function (a, b) {
return a.property < b.property ? 1 : -1; //降序
return a.property < b.property ? -1 : 1; //升序
});