Javascript:在字符串中查找单个字母最常用的单词

Javascript:在字符串中查找单个字母最常用的单词,javascript,string,function,character,Javascript,String,Function,Character,我有一个按单词分隔字符串的函数: function LetterCount(str) { var words = str.split(" "); var letters; var i; for (var i = 0; i < words.length; i++) { letters = words[i].split(""); } } 函数字母计数(str){ var words=str.split(“”); 变量字母; var i; for(var i=0;

我有一个按单词分隔字符串的函数:

function LetterCount(str) {
var words = str.split(" ");
var letters;
var i;
    for (var i = 0; i < words.length; i++) {
      letters = words[i].split("");
     }
}
函数字母计数(str){
var words=str.split(“”);
变量字母;
var i;
for(var i=0;i
此函数用于搜索字符串并计算每个字母:

function charFreq(s) {
  var i, j;
  var a = new Array();

  for (j = 0; j < s.length; j++) {
    for (i = 0; i < a.length; i++) {
        if (a[i][0] == s[j]) {
         a[i][1]++;
               break;
        }
    }

    if (i == a.length) {

      a[i] = [s[j], 1];
    }
  }

  return a;
}
功能charFreq(s){
varⅠ,j;
var a=新数组();
对于(j=0;j

正在努力找到一种同步使用这些代码的方法,以找出单词数组中哪个单词的字母重复次数最多。

我想这就是您想要的:

count = function(ary) { return [].reduce.call(ary, function(o, x) { return o[x] = (o[x]||0) + 1,  o }, {}) }

text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pretium lobortis arcu, eget rhoncus est commodo sit amet."

letter = "o"

max = text.split(" ").reduce(function(max, word) { return count(word)[letter] > count(max)[letter] ? word : max })

console.log(max) // "commodo"
一些只对我有用的代码

// how to write `max(words, key=lambda w: max(Counter(w).values()))` in js

max = function(xs, key) {
    // strictly speaking, there's no need to be schwartzian here, but it's nicer this way
    return xs.map(function(x) {
        return [x, key ? key(x) : x]
    }).reduce(function(m, v) {
        return v[1] > m[1] ? v : m
    })[0];
}

counter = function(xs) {
    return [].reduce.call(xs, function(o, x) {
        return o[x] = (Number(o[x]) || 0) + 1, o
    }, {});
}

values = function(o) {
    return Object.keys(o).map(function(x) { return o[x] })
}

words = "foo bar bbarb foxx abc".split(" ")
word = max(words, function(w) { return max(values(counter(w)))})
// bbarb
var all_words=str.split(“”);
var all_freq=所有单词.map(charFreq);
var max_freq=0;
var max_词;
对于(变量i=0;i最大频率){
最大频率=所有频率[i][j][1];
max_word=i;
}
}
}
log(“重复次数最多的单词是”+所有单词[最大单词]);

LetterCount
函数中的
j
是什么?只是一个占位符变量,用于对输入的字符串进行排序,但您在执行
letters[j]=…
之前从未设置过它。噢,这是上次尝试中的一些遗留变量,抱歉,删除了它,它发现了“o”最常用的单词,一般来说,不是重复次数最多的字母(如“密西西比”)。我太笨了,连所有的速记都听不懂=[
var all_words = str.split(' ');
var all_freq = all_words.map(charFreq);
var max_freq = 0;
var max_word;
for (var i = 0; i < all_freq.length; i++) {
    for (j = 0; j < all_freq[i].length; j++) {
        if (all_freq[i][j][1] > max_freq) {
            max_freq = all_freq[i][j][1];
            max_word = i;
        }
    }
}
console.log("Word with most repeats is "+all_words[max_word]);