我正在尝试创建一个计算重复字母值的函数,并且我想专门使用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/