通用js/ts方法

分享开发中封装的一些方法:

1、一天15分钟取一个点(96个)

2、两个数组顺序合并为一个对象数组

3、判断时间段是否有重复

4、时间段排序

具体实现:

1、一天15分钟取一个点

输出结果:

['00:00', '00:15', '00:30', '00:45', '01:00', '01:15', '01:30', '01:45', '02:00', '02:15', '02:30', '02:45', '03:00', '03:15', '03:30', '03:45', '04:00', '04:15', '04:30', '04:45', '05:00', '05:15', '05:30', '05:45', '06:00', '06:15', '06:30', '06:45', '07:00', '07:15', '07:30', '07:45', '08:00', '08:15', '08:30', '08:45', '09:00', '09:15', '09:30', '09:45', '10:00', '10:15', '10:30', '10:45', '11:00', '11:15', '11:30', '11:45', '12:00', '12:15', '12:30', '12:45', '13:00', '13:15', '13:30', '13:45', '14:00', '14:15', '14:30', '14:45', '15:00', '15:15', '15:30', '15:45', '16:00', '16:15', '16:30', '16:45', '17:00', '17:15', '17:30', '17:45', '18:00', '18:15', '18:30', '18:45', '19:00', '19:15', '19:30', '19:45', '20:00', '20:15', '20:30', '20:45', '21:00', '21:15', '21:30', '21:45', '22:00', '22:15', '22:30', '22:45', '23:00', '23:15', '23:30', '23:45']

源码:

/** 获取一天15分钟间隔 */
const onGetDate = (minute: number) => {
  let seconds = minute * 60
  let len = (60 * 24 * 60) / seconds //数组长度
  let total = 0
  let newArr = []
  for( let i = 0; i<len; i++ ) {
    let h = parseInt(total / 3600)
    let min = parseInt(total % 3600 / 60)
    newArr.push(s(h) + ':' + s(min))
    total += seconds
  }
  return newArr
}

const s = (n: number) => {
  return n < 10 ? '0' + n : n
}

2、两个数组顺序合并为一个对象数组,相邻value不等时,后一个对应name值取两次。

/** ['val1','val1',...],['val2','val2',...] ==> [{name: 'val1', value:'val2'}] 并处理改变时重复 */
const handleArrDonble = (nameArr: any, valueArr: any) => {
  const result = nameArr.map((item: any, index: any) => {
    return {
      name: item,
      value: valueArr[index]
    }
  })
  let arr = []
  arr.push(result[0])
  result.reduce((a: any, b: any) => {
    let obj = null
    if (a.value !== b.value) {
      obj = {
        name: b.name,
        value: a.value
      }
    }
    if (obj) {
      arr.push(obj, b)
    } else {
      arr.push(b)
    }
    return b
  })
  return arr
}

3、判断时间段是否有重复

let arr = [['00:30', '00:45'],['01:00', '01:45']]

    // 判断重复
    if (hasDuplicateTimes(arr)) {
      feedback.msgError('时间段有重复')
      reject(new Error('时间段有重复'))
      return
    }

/** 判断时间重复 */
const hasDuplicateTimes = (timeRanges) => {
  const timeSet = new Set()
  for (const [start, end] of timeRanges) {
    for (let time = start; time < end; time = addMinutes(time, 1)) {
      if (timeSet.has(time)) {
        return true
      }
      timeSet.add(time)
    }
  }
  return false
}
const addMinutes = (time, minutes) => {
  const [hours, remainingMinutes] = time.split(':').map(Number)
  let newHours = hours + Math.floor((remainingMinutes + minutes) / 60)
  let newRemainingMinutes = (remainingMinutes + minutes) % 60
  if (newRemainingMinutes === 60) {
    newRemainingMinutes = 0
    newHours += 1
  }
  return `${String(newHours).padStart(2, '0')}:${String(newRemainingMinutes).padStart(2, '0')}`;
}

4、时间段排序

/** 时间段排序 data: [['00:30', '00:45'],['01:00', '01:45']] */
const timerSort = (data) => {
  data.sort((a, b) => {
    const startTimeA = timeToMinutes(a.startTime);
    const endTimeA = timeToMinutes(a.endTime);
    const startTimeB = timeToMinutes(b.startTime);
    const endTimeB = timeToMinutes(b.endTime);

    if (startTimeA !== startTimeB) {
      return startTimeA - startTimeB
    } else {
      return endTimeA - endTimeB
    }
  })
  return data
}
const timeToMinutes = (time) => {
  const [hours, minutes] = time.split(':').map(Number)
  return hours * 60 + minutes
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值