数组和对象根据某属性排序

主要用到语法Array.prototype.sort(sortby)
sort(sortby) 方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列来构建的,sortby参数可选。规定排序顺序。必须是函数。

数字升序

如果要降序,把 a-b 倒过来一下成 b-a 就可以了

1
2
3
numberArray = [40, 1, 5, 200];
console.log('排序:'+ numberArray.sort( (a, b)=> a - b ));
//排序:1,5,40,200

根据属性排序

1
2
let members = [{id: 1, role: 3}, {id: 2, role: 1}, {id: 3, role: 1}, {id: 4, role: 4}]
members = members.sort((a, b) => a.role- b.role)

多条件排序

如果sortNo的大小一样就按sortNo2的数字倒序排,比如碰上日期时间属性,把日期时间转成时间戳来比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var arr= [ 
{ 'sortNo': 2, 'sortNo2': 3},
{ 'sortNo': 1, 'sortNo2': 3},
{ 'sortNo': 5, 'sortNo2': 3},
{ 'sortNo': 6, 'sortNo2': 3},
{ 'sortNo': 7, 'sortNo2': 3},
{ 'sortNo': 3, 'sortNo2': 4},
{ 'sortNo': 3, 'sortNo2': 2},
{ 'sortNo': 3, 'sortNo2': 1},
{ 'sortNo': 3, 'sortNo2': 3},
{ 'sortNo': 8, 'sortNo2': 3},
{ 'sortNo': 4, 'sortNo2': 1},
{ 'sortNo': 4, 'sortNo2': 2}
];
arr.sort((a, b)=>{
if (a.sortNo === b.sortNo) {
return a.sortNo2 - a.sortNo2;
} else {
return a.sortNo - b.sortNo;
}
});
console.log(arr);