如何使用Ramda计算数组中的重复项?

时间:2018-12-10 18:22:48

标签: javascript arrays ramda.js

我有一个重复值的数组,我需要使用ramda.js找出每个值出现在数组中的次数。

这是我的数组: [2013、2013、2013、2014、2014、2014、2014、2015、2015、2015、2015、2015、2015、2015、2016、2016、2016、2016、2016、2017、2017、2017、2017]

这就是我要摆脱的: [3,4,7,5,3]

这是在纯JavaScript中可能如何工作的示例。

function count (arr) {
  const counts = {}
  arr.forEach((x) => { counts[x] = (counts[x] || 0) + 1 })
  return Object.values(counts)
}

1 个答案:

答案 0 :(得分:4)

假设(如您的代码中)重复项不必按顺序排列,则可以使用R.countBy()R.values()获得相同的结果:

const { pipe, countBy, identity, values } = R;

const arr = [2013, 2013, 2013, 2014, 2014, 2014, 2014, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2016, 2016, 2016, 2016, 2016, 2017, 2017, 2017]

const countDupes = pipe(
  countBy(identity),
  values
)

console.log(countDupes(arr));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>