需求:数组内有多个对象,想要按照对象内的某字段将数组进行排序。
假使数组的数据为:
res = [ {name:'a', status:'finished', date:'2022-03-06 12:55:06'}, {name:'b', status:'pending', date:'2022-03-08 09:15:06'}, {name:'e', status:'finished', date:'2022-03-06 03:15:06'}, {name:'s', status:'created', date:'2022-03-09 05:15:06'}, {name:'d', status:'finished', date:'2022-03-09 05:15:06'}, ] // finished:已完成 // created:待签收 // pending: 进行中
需求例1:只需要将数组按 'date' 时间进行排序
--- 正序升序:将时间从小到大排序,相同时间不排序
res.sort((o1, o2) => { if (o1. date > 02. date) { return 1 } else if (o1. date < 02. date) { return - 1 } else { return 0 } })
* 简写:
res.sort((o1,o2) => o1.statusTime && 02. statusTime ? o1.statusTime.localeCompare(o2.statusTime) : 0)
// localeCompare():此方法只能用于字符串的比较,若是数值还得用上面的方法或者res.sort((o1,o2) => o1.statusTime - o2.statusTime)
--- 倒序降序:将时间从大到小排序,相同时间不排序【o2放到前面进行对比】
res.sort((o1, o2) => { if (o2. date > 01. date) { return 1 } else if (o2. date < 01. date) { return - 1 } else { return 0 } })
* 简写:
res.sort((o1,o2) => o1.statusTime && 02. statusTime ? o2.statusTime.localeCompare(o1.statusTime) : 0)
// localeCompare():此方法只能用于字符串的比较,若是数值还得用上面的方法或者res.sort((o1,o2) => o2.statusTime - o1.statusTime)
需求例2:首先将数组按 'date' 时间字段进行倒序排序;将时间相同的数据,按 'status' 状态字段进行排序
--- 已完成 'finished' 在前面,待签收'created'在最后面
const statusOrder = [ ' created', ' pending', ' finished'] res.sort((o1, o2) => { if (o2. date > 01. date) { return 1 } else if (o2. date < 01. date) { return - 1 } else { return statusOrder. index0f(o1.status) - statusOrder . indexOf (o2. status) })
* 简写:
const statusOrder = [ ' created', ' pending', ' finished'] res.sort((o1,o2) => { if (o2. statusTime === 01. statusTime) { return statusOrder. index0f(o1.status) - statusOrder . indexOf (o2. status) } return 02 . statusTime . LocaleCompare(o1. statusTime) })
--- 待签收 'created' 在前面,已完成 'finished' 在最后面
const statusOrder = [ ' created', ' pending', ' finished'] res.sort((o1, o2) => { if (o2. date > 01. date) { return 1 } else if (o2. date < 01. date) { return - 1 } else { return statusOrder. index0f(o2.status) - statusOrder . indexOf (o1. status) })
* 简写:
const statusOrder = [ ' created', ' pending', ' finished'] res.sort((o1,o2) => { if (o2. statusTime === 01. statusTime) { return statusOrder. index0f(o2.status) - statusOrder . indexOf (o1. status) } return 02 . statusTime . LocaleCompare(o1. statusTime) })
【例2待签收 'created' 在前面】效果类似:先按蓝色箭头数据排序后;将红色圈的时间相同的数据,再按绿色箭头排序