前言:这是一个实际项目的例子,当时自己脑子有点转不过来(前端写复杂的排序的机会极少,感觉缺少那种思维)。后来给后台同学讲了下,直接就说少写了一个条件......
数组源:
const dataSessionArr = [
{date: "2019-05-06", sessionKey: 1}
{date: "2019-05-13", sessionKey: 2}
{date: "2019-05-20", sessionKey: 3}
{date: "2019-05-27", sessionKey: 4}
{date: "2019-06-03", sessionKey: 5}
{date: "2019-06-10", sessionKey: 6}
{date: "2019-06-17", sessionKey: 7}
{date: "2019-06-24", sessionKey: 8}
{date: "2019-07-01", sessionKey: 9}
{date: "2019-05-01", sessionKey: 1}
{date: "2019-05-08", sessionKey: 2}
{date: "2019-05-15", sessionKey: 3}
{date: "2019-05-22", sessionKey: 4}
{date: "2019-05-29", sessionKey: 5}
{date: "2019-06-05", sessionKey: 6}
{date: "2019-06-12", sessionKey: 7}
{date: "2019-06-19", sessionKey: 8}
{date: "2019-06-26", sessionKey: 9}
{date: "2019-04-30", sessionKey: 1}
{date: "2019-05-07", sessionKey: 2}
{date: "2019-05-14", sessionKey: 3}
{date: "2019-05-21", sessionKey: 4}
{date: "2019-05-28", sessionKey: 5}
{date: "2019-06-04", sessionKey: 6}
{date: "2019-06-11", sessionKey: 7}
{date: "2019-06-18", sessionKey: 8}
{date: "2019-06-25", sessionKey: 9}
]
给张图,容易看一些:
排序要求:先按 sessionKey 升序排,再按 date 升序排
方法一:不太好理解,不会改变数据
const sortId = (a,b) => { //按session排序
if(a.sessionKey === b.sessionKey) { //如果sessionKey相同,按日期排序
const aa = a.date.replace(/-/g,''); //将日期转成 '20190321' 便于 - 运算,'2019-02-21'这种格式不能相减
const bb = b.date.replace(/-/g,'');
// if(a.date < b.date){ //如果b的日期大于a的日期
return aa - bb; //升序
// }else{
// return bb - aa; //升序
// }
}else{ //默认按sessionKey 升序排序
return a.sessionKey-b.sessionKey;
}
}
dataSessionArr.sort(sortId); //执行sort排序,传入回调函数
结果:
方法二:简单,容易理解,但会添加属性
// 给原数组的每一个元素添加一个Time属性
const deal_data = dataSessionArr.map(item => {
item.Time = new Date(item.date).getTime();
return item;
})
// 先按sessionKey排序
const sortSessionKey = deal_data.sort(function(a,b){
return a.sessionKey - b.sessionKey;
})
//再用按sessionKey排序得到的数组,按Time排序
const finallyData = sortSessionKey.sort(function(a,b){
return a.Time - b.Time;
})
结果:
文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出