mars-3d 公共方法:日期过滤和字段排序(自动识别数字和日期)

话不多说先上代码

过滤

/**
 *  日期过滤
 *
 * @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”,另外最后一个参数是正倒序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值