js数组排序之Array.sort()函数

1. sort函数的基本信息

语法:

arr.sort([compareFunction])

参数:

compareFunction [可选] 用于数组排序规则的比较函数。如果不含有该参数,数组元素按照转换字符串的各个字符的Unicode编码顺序进行排序。 compareFunction 参数: firstElement 用于比较的第一个元素 secondElement 用于比较的第二个元素

返回值:

排序后的数组,返回的是当前数组。 sort内的函数返回值小于0, firstElement排在secondElement前面; 返回值等于 0, firstElement,secondElement相等顺序无关要紧; 返回值大于 0, firstElement排在secondElement后面;

2. 应用方式

不使用任何参数的排序(默认按照数组转成字符串后的结果每一位的Unicode编码进行排序)

var ary = [311,43,54,4,40,26,31,33]

var arySortA = ary.sort();

console.log(arySortA);//26, 31, 311, 33, 4, 40, 43, 54

升序排列

var ary = [311,43,54,4,40,26,31,33];

var arySortB = ary.sort(function(a,b){

return a-b;

})

console.log(arySortB);//4, 26, 31, 33, 40, 43, 54, 311

降序排列

var ary = [311,43,54,4,40,26,31,33];

var arySortB = ary.sort(function(a,b){

return b-a;

})

console.log(arySortB);//311, 54, 43, 40, 33, 31, 26, 4

对包含对象的数组排序,要求根据对象中的年龄进行由大到小的顺序排列(数值型)

var arr = [{ 'name': '张三', age: 26 }, { 'name': '李四', age: 12 }, { 'name': '王五', age: 37 }, { 'name': '赵六', age: 4 }];

var arySortC = arr.sort((a, b) => {

return a.name - b.name;

});

console.log(arySortC);

对包含对象的数组排序,要求根据对象中的姓名不区分大小写进行由大到小的顺序排列(字符串型)

const arr3 = [{ 'name': 'a张三', age: 26 }, { 'name': 'D李四', age: 12 }, { 'name': 'b王五', age: 37 }, { 'name': 'C赵六', age: 4 }];

var arySortD = arr3.sort((s, t) => {

const _s = s.name.toLowerCase(); // 'D李四' -> 'd李四'

const _t = t.name.toLowerCase();

if(_s > _t) {

return 1;

} else if(_s < _t) {

return -1;

} else {

return 0;

}

});

console.log(arySortD);

对数组元素随机排序

var arr4 = [{ 'name': 'a张三', age: 26 }, { 'name': 'd李四', age: 12 }, { 'name': 'b王五', age: 37 }, { 'name': 'c赵六', age: 4 }];

var arySortE = arr4.sort((s, t) => {

return Math.random() < 0.5 ? 1 : -1;

});

console.log(arySortE);

查看原文