Js
数组排序array.sort()
语法
array.sort(function (a,b){
return a-b;
});
参数function可选。规定排序顺序。必须是方法。
注1:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。
注2:该操作在原数组中进行,即原数组发生改变
如果想按照其他规则进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
简单点就是:比较函数两个参数a和b,返回a-b 升序,返回b-a 降序
基本示例
var nums = [ 1,5,4,3];
nums.sort();
console.log(nums);
// (4) [1, 3, 4, 5]
使用方法
nums.sort(function(a,b){
return a-b;
});
console.log(nums);
// (4) [1, 3, 4, 5]
使用方法(反序)
nums.sort(function(a,b){
return b-a;
});
console.log(nums);
// (4) [5, 4, 3, 1]
根据对象属性进行排序
var objs = [{ id: 3, title: 'title3'},{ id: 1, title: 'title1'},{ id: 4, title: 'title4'},{ id: 2, title: 'title2'}];
objs.sort();
console.log(objs);
// 顺序没变
objs.sort(function(a,b){
return a.id-b.id;
});
// 按id进行顺序排序
我的一个使用场景
需要展示一个表格数据,并且按月份进行排序显示,但是这个表格数据的每一行,都是通过ajax独立获取。
我们创建一个变量items进行存放数据,每次ajax获取完后就往items.push一条数据
由于js是基于异步的,也就是执行ajax后获取到数据的时间是不固定的,最终items的数据其实是乱序的
为了使得其按月份排序,每次push之后执行一次sort
items.push(row);
items.sort(function(a,b){
return a.year + a.month - b.year - b.month;
});