我有以下功能,可以根据日期的月份设置日期点。但我正在硬编码这些值。我想重新考虑函数并删除多余的else if块。如我们所见,当天数减少一定值时,扣n-1分。那么,我如何重构它呢?
points = {}
function calcPointsForDates(createdTime) {
let today = new Date()
let Y = today.getFullYear()
let M = today.getMonth()
let T = today.getDate()
let monthAgo = days => new Date(Y, M, T - days).getTime()
if (createdTime > monthAgo(30)) {
points.date = 2
} else if (createdTime < monthAgo(180)) {
points.date = -5
} else if (createdTime < monthAgo(90)) {
points.date = -4
} else if (createdTime < monthAgo(60)) {
points.date = -3
} else if (createdTime < monthAgo(30)) {
points.date = -2
}
}
calcPointsForDates(post.created.getTime())
2条答案
按热度按时间luaexgnf1#
考虑具有点属性的点对象,这些点是可以用来实现与if…..块相同的逻辑的点的中断值,例如。
通过在键上循环找到第一个天数(diff)小于键的值。然后使用它返回值,其中diff<30返回2,diff<60返回-2,等等。值“1e10”本质上表示无穷大,可以设置为number.max_safe_integer(9007199254740991天或大约24.6万亿年前)。
因此,获取今天和createddate之间的天数差,找到相关的键并返回点,例如。
上述用途
<
用于比较,使断点不包含在内,30天前返回-2。如果断点应包含在内,则进行比较<=
或向断点添加1。警告
计算差异的方法是近似的,有更好的方法。
object.keys中的对象属性不需要与用于创建Days2点的对象文字具有相同的顺序,因此在对它们进行迭代之前,应该严格地对它们进行排序。
qpgpyjmq2#
您可以将限制和日期点添加到数组中,并从最低到最高迭代该数组。如果满足限制条件,则返回相应的日期点。如果不满足任何条件,则返回默认值。