【问题标题】:using R.groupWith (ramda)使用 R.groupWith (ramda)
【发布时间】:2017-05-25 05:14:26
【问题描述】:

我正在尝试根据dateValue 将以下数组分组,但似乎无法使其正常工作。我在这里错过了什么?

const dates = [
  {"id":83,"dateValue":"2017-05-24"},
  {"id":89,"dateValue":"2017-05-28"},
  {"id":91,"dateValue":"2017-05-25"},
  {"id":78,"dateValue":"2017-05-24"},
  {"id":84,"dateValue":"2017-05-25"}
]

const groups = R.groupWith(R.eqProps('dateValue'),dates)

console.log(groups)
<script src="//cdn.jsdelivr.net/ramda/latest/ramda.min.js"></script>

我添加了一个link to ramda repl with this code loaded

预期结果:

[ [ { dateValue: "2017-05-24", id: 83 },
    { dateValue: "2017-05-24", id: 78 } ],
  [ { dateValue: "2017-05-28", id: 89 } ],
  [ { dateValue: "2017-05-25", id: 91 } ],
  [ { dateValue: "2017-05-25", id: 84 } ] ]

【问题讨论】:

    标签: javascript ramda.js


    【解决方案1】:

    groupBygroupWith 之间有几个不同之处。

    • groupBy 接受一个为单个项目生成分组键的函数。 groupWith 接受一个表示两个项目是否匹配的二元谓词。
    • groupBy 将所有项目收集到单个集合中。 groupWith 只收集连续的匹配项。
    • groupBy 返回一个将这些键映射到匹配项列表的对象。 groupWith 返回(又是连续的)匹配项的列表。

    这是第二点让你绊倒。你可能想要groupBy:

    R.groupBy(R.prop('dateValue'))(dates)
    // or
    R.compose(R.values, R.groupBy(R.prop('dateValue')))(dates);
    

    您可以在 Ramda REPL 上看到这一点。

    【讨论】:

    • 啊! “连续的”!是不是在什么地方提到过?没看到。不过谢谢你的回答。
    • 啊,有道理。但是,它在文档中的哪个位置指定了对groupWith 的连续考虑?我在ramdajs.com/docs/#groupWith 没有看到它。
    • 它没有这么说,虽然例子应该说清楚。欢迎提出修复它的请求请求。
    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2020-10-06
    相关资源
    最近更新 更多