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查看更新。。。记录每个单词最重复的字母。这几乎是完美的。然而不幸的是,我必须有一个单一的功能。根据您的建议,我将尝试在其中嵌套第二个函数。