话不多说先上代码
过滤
/**
* 日期过滤
*
* @export
* @param {any} array 传入数组
* @param {string} key 示例: "info.date.update"
* @param {string} time time示例: "1d" "2m"
* @return {any | null} 返回过滤后的数组
*/
export function fieldTime(array: any, key: string, time: string): any | null {
let cutTime: any
switch (true) {
case time.includes("h"):
cutTime = parseInt(time.split("h")[0])
break
case time.includes("d"):
cutTime = parseInt(time.split("d")[0]) * 24
break
case time.includes("w"):
cutTime = parseInt(time.split("w")[0]) * 24 * 7
break
case time.includes("m"):
cutTime = parseInt(time.split("m")[0]) * 24 * 30
break
case time.includes("y"):
cutTime = parseInt(time.split("y")[0]) * 24 * 365
break
}
const keyArray = key.split(".")
return array.filter((item: any) => {
let x = item
for (let i = 0; i <= keyArray.length - 1; i++) {
x = x[keyArray[i]]
}
return (new Date().getTime() - new Date(x).getTime()) / 3600000 <= cutTime
})
}
传入需要过的数组,数组内日期的字段及过滤的时间段即可对你的数组进行一个日期的过滤,"1d"代表一天,“2h”代表两个小时是不是非常的方便呢?
排序
/**
* 字段排序
*
* @export
* @param {any} array 传入数组
* @param {string} key 示例: "info.date.updatetime"
* @param {string} sortWay "number"(按包含的数字排序) "date"(按日期排序)
* @param {boolean} order 正倒序
* @return {any | null} 返回排序后的数组
*/
export function sortByKey(array: any, key: string, order: boolean): any | null {
const keyArray = key.split(".")
return array.sort(function (a, b) {
let x = a
let y = b
for (let i = 0; i <= keyArray.length - 1; i++) {
x = x[keyArray[i]]
y = y[keyArray[i]]
}
let result: any
// let x1: string
// let y1: string
// switch (sortWay) {
// case "number":
// x1 = x
// y1 = y
// x = x1.replace(/[^\d]/g, " ") // 去除数字以外内容,仅对包含的数字排序
// y = y1.replace(/[^\d]/g, " ")
// result = order ? y - x : x - y
// break
// case "date":
// result = order ? new Date(y).getTime() - new Date(x).getTime() : new Date(x).getTime() - new Date(y).getTime()
// break
// case "letter":
// break
// default:
// break
// }
if (!isNaN(Date.parse(x)) && isNaN(x)) {
result = order ? new Date(y).getTime() - new Date(x).getTime() : new Date(x).getTime() - new Date(y).getTime()
} else {
result = order ? y - x : x - y
}
return result
})
}
目前这样的排序方法还只能对日期和数字进行简单的正倒序排序,之后会给出更加详细的功能例如自定义排序方式等,使用方法也很简单,传入需要排序的数组,排序根据的字段key如“info.date”,另外最后一个参数是正倒序