我正在编写一个JavaScript函数,该函数必须带有一个字符串参数并确定具有最大数目或重复(或最频繁)的非顺序字符的一个或多个单词,并返回该一个或多个单词。
解决这个问题的方法是,首先找到每个单词重复一个字符的最大次数,然后记录该数字,以供以后在函数中使用,以测试字符串中的每个单词(或字符串数组,如我稍后将其拆分);如果单词符合条件,则将其放入我返回的数组中。
我的maxCount函数似乎可以正常工作,但是当我尝试使其与其他函数一起使用以获取返回具有最大重复字符的单词时,它在JS Fiddle中不起作用-它不断告诉我“ string.split是不是函数”-我会承认我使用它(string.split(string[i]).length
)逐个字母分析字符串中的单词的方式有点不合常规-我希望有某种方法可以挽救我的一些逻辑以使之使用可以一起工作以获得我想要的结果的功能。
另外,我不知道我是否正确/以“合法”方式使用Math.max。我曾尝试将变量名切换为“字符串”,以至于会有所作为,但即使我的参数是字符串的变体,而且也就是要表示的字符串,它都没有。
这是我的小提琴的链接:
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从第一个函数中也无法使用的数组中提取原始值。我不确定现在要做什么或应该采取什么角度-我觉得如果我更多地了解出了什么问题,就可以更轻松地解决它。任何帮助将非常感激。谢谢!
最佳答案
您将在第20行将数组传递给maxCount,但它需要一个字符串:
var maxRepeats = maxCount(stringArray);
您应该使用:
var maxRepeats = maxCount(eachWord);