javascript - 使用 Ramda 检测序列中的间隙?

标签 javascript functional-programming ramda.js

在 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/

相关文章:

Haskell 求完美平方——出现类型错误

functional-programming - Lisp - 在 n 个列表中拆分列表

javascript - 高级 Ramda 数组转换

javascript - 为什么我的 Ajax 成功函数永远不会触发?

javascript - 如何在 ember 中包含图表 js 注释?

javascript - sequelize 忽略 JSON 对象上的 "save()"方法

javascript - Angular 滚动条中的 ag-grid 不起作用

scala - 如何从左到右和从右到左遍历数组?

javascript - 具有动态功能的 Ramda 管道

javascript - Ramda R.pickBy R.identity 包括零 0