使用R.groupWith(ramda)

时间:2017-05-24 18:24:06

标签: javascript ramda.js

我正在尝试将以下数组分组为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 } ] ]

1 个答案:

答案 0 :(得分:3)

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 上看到这一点。