在 ramda.js 中,如何检测序列中是否存在大于某个值 n 的间隙?
例如对于已经排序的值:
[
{"name":"bob", loginDate:"2017-10-01"},
{"name":"bob", loginDate:"2017-10-02"},
{"name":"bob", loginDate:"2017-10-03"},
{"name":"bob", loginDate:"2017-10-10"},
]
如何检测任意两条记录的登录日期之间的差距是否大于 7?但不在当前记录和第一个记录之间 - 仅检查前一个记录。我不知道如何将当前项目与 ramda 中的前一个项目进行比较。
最佳答案
当想要处理列表中的相邻值时,创建一个可以使用R.aperture
像值的滑动窗口一样遍历的列表通常很有用。 .
执行列表中前一项和当前项之间比较的二进制函数可以包含在 R.apply
中。这样它将接受一个包含两个元素的数组进行比较。
用你的例子来说明:
const maxGap = 1000 * 60 * 60 * 24 * 7 // 7 days in ms
const gtMaxGap = (prev, curr) =>
maxGap + Date.parse(prev.loginDate) < Date.parse(curr.loginDate)
const anyGapTooLarge = R.pipe(R.aperture(2), R.any(R.apply(gtMaxGap)))
anyGapTooLarge([
{"name":"bob", loginDate:"2017-10-01"},
{"name":"bob", loginDate:"2017-10-02"},
{"name":"bob", loginDate:"2017-10-03"},
{"name":"bob", loginDate:"2017-10-10"},
]) // false
R.aperture
的另一种替代方法是使用 R.zip
生成相邻值的列表。用自己的尾部压缩列表。
关于javascript - 使用 Ramda 检测序列中的间隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46556839/