javascript - 需要帮助使字符串输入返回一个统计字母对频率的直方图

标签 javascript arrays string histogram frequency

我需要编写一个函数,该函数将字符串作为输入并按降序输出字母对频率的直方图。

我已经设法编写了一个返回单个字符计数的函数,但我不知道如何进行配对。

这是我迄今为止所拥有的:

var string = "etc";
var histogram = {};

for (var i = 0, len = string.length; i < len; i++) {
    var char = string[i];
    if ((string[i] !== " ") && (string[i] !== " ")) {
        histogram[char] = (histogram[char] || 0) + 1;
    }
};

console.log(histogram);

该函数有效,我能够让它将所有空白区域从直方图中保留出来。不过,我不知道从这里该去哪里。如何让它评估对,以及如何省略任何单个字符(后面没有另一个字符的字符)...非常感谢任何帮助。

最佳答案

另一种方法,将问题分解为小块:

const inPairs = (xs) => 
  [...xs].reduce((a, x, i) => i == 0 ? a : [...a, xs[i - 1] + x], [])

const pairFreq = str => str         //   "this is a good thing"
  .split (/\s+/)                    //=> ["this","is","a","good","thing"]
  .filter (s => s.length > 1)       //=> ["this","is","good","thing"]
  .flatMap (inPairs)                //=> ["th","hi","is","is","go","oo","od","th","hi","in","ng"]
  .reduce ( (a, s) => ({...a, [s]: (a[s] || 0) + 1}), {})
                                    //=> {"th":2,"hi":2,"is":2,"go":1,"oo":1,"od":1,"in":1,"ng":1}

console .log (
  pairFreq('this is a good thing')
)

显然,如果您选择的话,您可以内联inPairs。我喜欢这种转变方式,只需将步骤串联起来即可插入我实现最终目标。

关于javascript - 需要帮助使字符串输入返回一个统计字母对频率的直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56843656/

相关文章:

javascript - XMLHTTPRequest 未返回

javascript - 将 radio 设置为未选中

c - a[a[]] 在 C 中做什么?

java - 为什么没有 toArray(Class<T>)?

python - 在python中读取文件

javascript - 如何测试一个数组是否是另一个数组的子集?

javascript - 正则表达式 : how to exclude matched groups from $N?

python - 在 Python : 中加入两个列表

c - 如何将字符串数组传递给 C 中的另一个函数

string - 为什么将 & 应用于字符串会返回 &str?