需要安装库
"lodash": "latest"
import _ from 'lodash'
/**
* 数据排序
* @param {*} origin 源数据
* @param {*} sortKey 排序的字段
* @param {*} type 排序方式 descending:倒序, ascending:正序
* Rules: 将【pre】和【next】为非零Boolean值【null、undefined、''】的项移到数据最后,不参与正常排序
*/
sortByKey(origin, sortKey, type = 'descending') {
// 深拷贝一份原数组, 避免改变原数组(这里引入Lodash中的深拷贝函数),sort方法会改变原数组而非生成新数组
const target = _.cloneDeep(origin)
// 排序规则不在范围内则直接返回原数组的拷贝
if (!['descending', 'ascending'].includes(type)) return target
return target.sort((pre, next) => {
let preValue = pre[sortKey]
let nextValue = next[sortKey]
if (!preValue && preValue !== 0) {
preValue = type === 'descending' ? -(Math.pow(2,53) - 1) : (Math.pow(2,53) - 1)
}
if (!nextValue && nextValue !== 0) {
nextValue = type === 'descending' ? -(Math.pow(2,53) - 1) : (Math.pow(2,53) - 1)
}
return type === 'descending' ? (nextValue - preValue) : (preValue - nextValue)
})
},
原作者:https://blog.csdn.net/StoneG_G/article/details/123520325