【问题标题】:having an issue w/ .split in a JavaScript function that gets the max # of repeating chars per word in a string在 JavaScript 函数中出现带有 .split 的问题,该函数获取字符串中每个单词的最大重复字符数
【发布时间】:2016-02-07 05:35:57
【问题描述】:

我正在编写一个 JavaScript 函数,它必须接受一个字符串参数并确定具有最大数量或重复(或最频繁)非连续字符的一个或多个单词,并返回那个或多个单词。

我解决这个问题的方法是首先找到一个字符在每个单词中重复的最大次数,然后记录该次数以供稍后在函数中使用,以测试字符串中的每个单词(或数组我后来拆分的字符串);如果单词满足条件,则将其推送到我返回的数组中。

我的 maxCount 函数本身似乎可以正常工作,但是当我尝试让它与我的其他函数一起工作以获取返回最大重复字符的单词时,它在 JS Fiddle 中不起作用 - 它一直告诉我“字符串.split 不是函数” - 我承认我使用它 (string.split(string[i]).length) 逐字分析字符串中的单词的方式有点不合常规 - 我希望有一些方法可以挽救我的一些逻辑使这项工作在可以协同工作以获得我想要的结果的功能中发挥作用。

另外,我不知道我是否正确/以“合法”的方式使用 Math.max,我希望如此。我尝试将我的变量名切换为“字符串”,认为这会有所作为,但即使我的参数属于字符串种类并且它是一个正在被表示的字符串,它也没有。

这是我的 Fiddle 的链接: https://jsfiddle.net/Tamara6666/rdwxqoh6/

这是我的代码:

var maxCount = function (word) {
  /// var maxRepeats = 0;
  var numArray = [];
  var string = word;
  for (var i = 0, len = string.length; i < len; i++) {
  //split the word('string') into letters at the index of i
    numArray.push((string.split(string[i]).length) -1);
  }
  var max = Math.max(...numArray);
  return max;
}
///console.log(maxCount("xxxxxxxxxxxxx"));

var LetterCount = function(string){
  var repeatedChars = 0;
  var wordArray=[];
  var stringArray = string.split(" ");
  for (var i = 0; i < stringArray.length; i++){
  var eachWord = stringArray[i];
  var maxRepeats = maxCount(stringArray);

  if (repeatedChars < maxRepeats) {
    repeatedChars = maxRepeats;
    wordArray = [eachWord];
  }else if (repeatedChars == maxRepeats) {
    wordArray.push(eachWord);
  }
}
return wordArray;  
};

console.log(LetterCount("I attribute my success to cats"));
//should return ["attribute", "success"]

*** 我尝试将第一个函数映射到在空格处拆分字符串时形成的数组,但它只是返回给我一个空数组(在此示例中我也可能没有正确使用 map) ;我也尝试过使用 valueOf 从第一个函数中提取原始值,这也不起作用。我不确定此时该做什么或采取什么角度-我觉得如果我了解更多问题所在,我可以更轻松地修复它。任何帮助将非常感激。谢谢!

【问题讨论】:

    标签: javascript arrays string function split


    【解决方案1】:

    您在第 20 行将一个数组传递给 maxCount,而它需要一个字符串:

    var maxRepeats = maxCount(stringArray);
    

    你应该使用:

    var maxRepeats = maxCount(eachWord);
    

    【讨论】:

    • 天哪,谢谢@Koder!!!!!!!我已经为此工作了好几个小时,尝试各种疯狂的东西,以为我将不得不重新考虑整个问题,这是一个如此简单的解决方案,我可以保留我所有的工作——非常感谢! !!!!!!我很欣赏它!!!!
    【解决方案2】:

    如果你得到 split is not a function 错误,那么首先通过在控制台上打印它来确保你的字符串不为空。如果它不为空,则确认它是字符串而不是数组或其他东西。

    【讨论】:

    • 好的,@Xkorpion-当我在第二个函数的空格处将字符串拆分为子字符串数组时,它变成了一个数组-这就是第一个函数独立工作但它没有的原因'在第二个函数中不起作用-它在一个数组中起作用-也许如果我在第二个函数中使用正则表达式拆分字符串而不是我可以找到一种方法将第一个函数映射到大批?我只是不知道我能从中挽救什么,但我会尝试....
    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2018-10-24
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多