JS数组多条件排序基于Array.sort()方法,首先要了解sort()方法的用法。
sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序。
eg:
var a = [2, 3, 5, 1, 0, 9]
a.sort(function(a, b){return a-b})
sort()方法接收函数作为参数时,排序主要根据传入函数的返回值是否大于0进行排序。
1)当 a-b < 0时,则a元素排在b元素的前面;(a、b元素位置不变)
2)当a-b= 0时,a,b元素的位置不变;
3)当a-b > 0时,则b元素排在a元素的前面。(a、b元素位置交换)
当数组元素为对象时,若要根据对象的多个属性进行排序,就涉及到多条件排序。
var list = [{}, {}, {}]
list.sort(cardsSortRule)
// 排序规则函数
cardsSortRule (pre, next) {
if (!pre.expireFlag && pre.expireFlag === next.expireFlag) {
// 一级分类内部的二级排序:没过期时,激活时间倒序
return next.effectiveTimeStart - pre.effectiveTimeStart // -1
} else if (pre.expireFlag && pre.expireFlag === next.expireFlag) {
// 一级分类内部的二级排序:过期时,过期时间倒序
return next.expireTime - pre.expireTime // -1
} else {
// 最外层一级大类排序:没过期排在过期前面
if (pre.expireFlag && !next.expireFlag) {
return 1
} else {
return -1
}
}
}
console.table(list)