javascript - 如何使用reduce方法计算字符串中的字母

标签 javascript methods reduce

我正在尝试创建一个计算重复字母值的函数,并且我想专门使用reduce函数来实现这一点。

    letterFrequency('aaAabb dddDD hhcc')
    Should return: [['d',5], ['a',4], ['b',2], ['c',2], ['h',2]]

我想在不使用任何循环的情况下专门执行此操作。谢谢!

这是我正在尝试解决的问题: http://www.codewars.com/kata/53e895e28f9e66a56900011a/train/javascript

但我想用reduce函数来做到这一点。

最佳答案

我会分开一些担忧。我不会尝试编写一个完成上述所有操作的归约函数,而是将其分为 3 部分。

Reduce 函数

此函数设计为传递给 .reduce 调用。它计算传递给它的项目的频率。

function duplicates(frequency, letter) {
  frequency[letter] = frequency[letter] + 1 || 1;
  return frequency;
}

转换函数

此函数将常规 Javascript 对象转换为您指定的格式。

function transform(hash) {
  var keys = Object.keys(hash);
  return keys.map(function(key) {
    return [key, hash[key]];
  });
}

包装函数

此函数包装其他两个函数以创建您想要的输出。

function findFrequencies(string) {
  var freqs = string
    .toLowerCase()
    .split('')
    .reduce(duplicates, {});

  return transform(freqs);
}
<小时/>

排序功能

最后,如果您想对频率进行排序,那么您可以编写一个适用于这种类型的排序函数。

var frequencies = [['d',5], ['a',4], ['b',2], ['c',2], ['h',2]];
frequencies.sort(function(a, b) {
  return a[1] - b[1];
});

关于javascript - 如何使用reduce方法计算字符串中的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757863/

相关文章:

python - Python3 中减少错误的 lambda

javascript - 网页中的 Excel 数据透视表

javascript - 使用内部网络,是否可以静默打印文档?

javascript - 用于比较 angularjs 中的日期的自定义过滤器

java - android 将变量从一种方法传递到另一种方法

java - 使用 getter 但不分配返回值是不好的做法吗?

java - 使用 Stream.reduce 求逆和不正确

javascript - 如何在javascript中创建列表字典

java - 如何在java中使用getY()方法?

javascript - 如何在javascript中获取对象数组中的最大值和最小值?