防抖
export const debounce = (fn, delay = 300) => {
let timer = null
return function cb(...args) {
let context = this
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
fn.apply(context, args)
}, delay)
}
}
节流
export const throttle = (fn, interval = 300) => {
let last = 0
return function cb(...args) {
let context = this
let now = +new Date()
if (now - last >= interval) {
last = now
fn.apply(context, args)
}
}
}
对象克隆
export const clone = obj => {
let o
if (typeof obj === 'object') {
if (obj === null) {
o = null
} else if (obj instanceof Array) {
o = []
for (let i = 0, len = obj.length; i < len; i++) {
o.push(clone(obj[i]))
}
} else {
o = {}
for (let j in obj) {
o[j] = clone(obj[j])
}
}
} else {
o = obj
}
return o
}
日期
export function getCurDate() {
let myDate = new Date()
let nowY = myDate.getFullYear()
let nowM = myDate.getMonth() + 1
let nowD = myDate.getDate()
let curDate = `${nowY}-${nowM < 10 ? `0${nowM}` : nowM}-${nowD < 10 ? `0${nowD}` : nowD}`
return curDate
}
export function getBeforeDate(during) {
let myDate = new Date()
let lw = new Date(myDate - 1000 * 60 * 60 * 24 * during)
let lastY = lw.getFullYear()
let lastM = lw.getMonth() + 1
let lastD = lw.getDate()
let beforeDate = `${lastY}-${lastM < 10 ? `0${lastM}` : lastM}-${lastD < 10 ? `0${lastD}` : lastD}`
return beforeDate
}
export function getCountDays() {
let curDate = new Date()
let curMonth = curDate.getMonth()
curDate.setMonth(curMonth + 1)
curDate.setDate(0)
return curDate.getDate()
}
export function setDataRangeByDays(day) {
let start = new Date(Date.now() - day * 24 * 3600 * 1000)
let end = new Date()
start.setHours(0)
start.setMinutes(0)
start.setSeconds(0)
end.setHours(23)
end.setMinutes(59)
end.setSeconds(59)
console.log(new Date(start))
return [new Date(start), new Date(end)]
}
算法
var operationNumber = function(arg1, arg2, operator) {
var oper = ['+', '-', '*', '/']
if (isNaN(arg1) || isNaN(arg2) || oper.indexOf(operator) < 0) {
return NaN
}
if (operator === '/' && Number(arg2) === 0) {
return Infinity
}
if (operator === '*' && Number(arg2) === 0) {
return 0
}
if ((arg1 === arg2 || Number(arg1) === Number(arg2)) && operator === '-') {
return 0
}
var r1, r2, max, _r1, _r2
try {
r1 = arg1.toString().split('.')[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (e) {
r2 = 0
}
max = Math.max(r1, r2)
_r1 = max - r1
_r2 = max - r2
if (_r1 !== 0) {
arg1 = arg1 + '0'.repeat(_r1)
}
if (_r2 !== 0) {
arg2 = arg2 + '0'.repeat(_r2)
}
arg1 = Number(arg1.toString().replace('.', ''))
arg2 = Number(arg2.toString().replace('.', ''))
var r3 = operator === '*' ? max * 2 : operator === '/' ? 0 : max
var newNum = eval(arg1 + operator + arg2)
if (r3 !== 0) {
var nStr = newNum.toString()
nStr = nStr.replace(/^-/, '')
if (nStr.length < r3 + 1) {
nStr = '0'.repeat(r3 + 1 - nStr.length) + nStr
}
nStr = nStr.replace(new RegExp('(\\d{' + r3 + '})$'), '.$1')
if (newNum < 0) {
nStr = '-' + nStr
}
newNum = nStr * 1
}
return newNum
}
Number.prototype.add = function(arg2) {
return operationNumber(this, arg2, '+')
}
Number.prototype.sub = function(arg2) {
return operationNumber(this, arg2, '-')
}
Number.prototype.mul = function(arg2) {
return operationNumber(this, arg2, '*')
}
Number.prototype.div = function(arg2) {
return operationNumber(this, arg2, '/')
}