Javascript 函数显示word中出现的最大字母数?

Javascript 函数显示word中出现的最大字母数?,javascript,arrays,function,Javascript,Arrays,Function,我正在尝试编写一个函数来识别重复字母最多的单词,目前为止我将其分解以识别句子中出现的大多数字母,但我不确定现在如何将返回值改为每个单词的重复字母总数,而不是每个句子的重复字母总数 function letRepeat(str) { var letArray = {}; for (var i = 0; i < str.length; i++) { letArray[str[i]] = (letArray[str[i]] || 0) + 1; }

我正在尝试编写一个函数来识别重复字母最多的单词,目前为止我将其分解以识别句子中出现的大多数字母,但我不确定现在如何将返回值改为每个单词的重复字母总数,而不是每个句子的重复字母总数

function letRepeat(str) {
    var letArray = {};
    for (var i = 0; i < str.length; i++) {
        letArray[str[i]] = (letArray[str[i]] || 0) + 1;
    }
    var max = 0;
    for (i in letArray) {
        max = Math.max(max, letArray[i]);
    }
    return letArray;
}

console.log(letRepeat("Hello there Larry Gormoon!"));

另外,你知道为什么
[object object]
会导致输出吗?

如果你想要每个单词的重复字母总数,你只需要把句子分成几个单词,然后稍微修改一下代码

函数countWordRpt(str){
var countObj={};
//将字符串拆分为单词,
//数一数每个单词中重复的字母。
str.split(“”).forEach(函数(字){
countObj[word]=函数countLetRpt(){
var letCount={};
//数一数每个单词中重复的字母。
word.split(“”).forEach(函数(字母){
letCount[字母]=++letCount[字母]| 1;
});
//找出重复次数最多的字母。
//可能有几个字母重复了很多次,
//所以我在这里使用一个数组。
var max=[];
用于(出租计数中的var i){
if(出租人拥有自己的财产(i)){
if(letCount[max[0]countObj[max[0]].max.count){
max=[word];
}else if(countObj[word].max.count==countObj[max[0]].max.count){
最大推力(字);
}
}
}
countObj.max={
字:马克斯,
计数:countObj[max[0]].最大计数
};
返回countObj;
}
var str=‘你好,拉里·戈尔穆恩!’;

console.log(countWordRpt(str))此代码将返回一个对象,该对象包含作为键的单词及其值,作为包含每个字母出现的对象。它还生成一个键/值对,指示它们中出现次数最多的单词。注意,使用此代码,如果有两个单词出现率相同,它将选择最后一个要处理的单词作为总数添加

function letRepeat(str) {
    var totals = {};

    // split the words into an array
    // use reduce but pass in an inital object so our output
    // is also an object
    return str.split(' ').reduce(function (p, c) {
        totals[c] = 0;

        // split each word down into letters
        // if the letter is not in the "letters object" add it
        // increment the value count
        p[c] = c.split('').reduce(function (p2, c2) {
            p2[c2] = ++p2[c2] || 1;
            if (p2[c2] > 1) totals[c]++;
            return p2;
        }, {});

        // find the word with the highest letter reoccurence
        var highest = Object.keys(totals).reduce(function (a, b) {
            return totals[a] > totals[b] ? a : b;
        });
        p.highest = { word: highest, reoccurences: totals[highest] };
        return p;
    }, {});
}

letRepeat("Hello there Larry Gormoon!");

输出:

[object Object] {
   : 3,
  !: 1,
  a: 1,
  e: 3,
  G: 1,
  H: 1,
  h: 1,
  l: 2,
  L: 1,
  m: 1,
  n: 1,
  o: 4,
  r: 4,
  t: 1,
  y: 1
}
Gormoon在这里是最高的,因为“o”重复出现2次以上

{
  "Hello": {
    "H": 1,
    "e": 1,
    "l": 2,
    "o": 1
  },
  "highest": {
    "word": "Gormoon!",
    "reoccurences": 2
  },
  "there": {
    "t": 1,
    "h": 1,
    "e": 2,
    "r": 1
  },
  "Larry": {
    "L": 1,
    "a": 1,
    "r": 2,
    "y": 1
  },
  "Gormoon!": {
    "G": 1,
    "o": 3,
    "r": 1,
    "m": 1,
    "n": 1,
    "!": 1
  }
}

我将把它分解为两个独立的函数

对一个字中的字符进行计数,返回一个包含该字的数组,最大重复次数

function repCount (word) {
  var orig = word,
      len = word.length,
      mem = {},
      max = 0,
      char, i;

  word = word.toLowerCase();

  for (i = 0; i < len; i++) {
    char = word[i];

    mem[char] = mem[char] + 1 || 1;

    if (mem[char] > max) {
      max = mem[char];
    } 
  }

  return [orig, max];
}
函数重复计数(word){
var orig=单词,
len=单词长度,
mem={},
最大值=0,
查尔,我;
word=word.toLowerCase();
对于(i=0;imax){
max=mem[char];
} 
}
返回值[原始值,最大值];
}
使用第一个,检查句子中的每个单词。你需要决定在你的头脑中单词的构成。对我来说,这是一个完整的字母、撇号和连字符序列。其他可能会在空白字符上拆分。两者都有缺点

function mostRepLet (str) {
  var words = str.match(/[\w'-]+/gi),
      len = words.length,
      most = ['', 0],
      chk, i;

  for (i = 0; i < len; i++) {
    chk = repCount(words[i]);

    if (chk[1] > most[1]) {
      most = chk;
    }
  }


  return most[0];
}
函数mostRepLet(str){
var words=str.match(/[\w'-]+/gi),
len=单词长度,
most=['',0],
chk,i;
对于(i=0;imost[1]){
most=chk;
}
}
返回最多[0];
}
全部加在一起

var-phrase='你好,拉里·戈尔穆恩!';
函数重复计数(word){
var len=单词长度,
mem={},
最大值=0,
查尔,我;
对于(i=0;imax){
max=mem[char];
} 
}
返回[word,max];
}
函数mostRepLet(str){
var words=str.match(/[\w'-]+/gi),
len=单词长度,
most=['',0],
chk,i;
对于(i=0;imost[1]){
most=chk;
}
}
返回最多[0];
}

警觉(mostRepLet(短语))
letArray是一个对象,您想要什么输出?预期的输出是什么?对于初学者
var letArray={}不是数组,而是对象<代码>var letArray=新数组()
var letArray=[]
是一个数组。我只是想得到
{Gormoon}
,或者如果多个单词有相同的最大重复字母数,那么它们也会包含在答案中。而且
max
当前没有被返回,因为它只告诉最大重复次数,而没有告诉字母或单词。我仍在尝试合并它。这与我的尝试非常接近,但是它仍然没有指定在其他单词上面重复次数最多的单词。@CharlesWatson查看更新。。。记录每个单词最重复的字母。这几乎是完美的。然而不幸的是,我必须有一个单一的功能。根据您的建议,我将尝试在其中嵌套第二个函数。