Javascript 如何使用For语句生成更简洁的代码?

Javascript 如何使用For语句生成更简洁的代码?,javascript,html,for-loop,web-platforms,Javascript,Html,For Loop,Web Platforms,我是StackOverflow和JavaScript方面的新手,我尝试从字符串中获取重复的第一个字母,同时考虑大小写字母,并使用for语句计数和获取结果。问题是我使用的表单太长,分析情况时可能会遇到这样的情况,您可能只能在这个练习中使用“For”语句,我需要迭代,但不是使用更干净和精简的代码,这会完全阻止我,这就是我请求帮助理解并继续理解和使用这句话的原因。在本例中,结果在一个函数内的JavaScript脚本和3个“For”语句中进行了测试,获得了非常积极的结果,但我无法仅在1中创建它(很抱歉,

我是StackOverflow和JavaScript方面的新手,我尝试从字符串中获取重复的第一个字母,同时考虑大小写字母,并使用for语句计数和获取结果。问题是我使用的表单太长,分析情况时可能会遇到这样的情况,您可能只能在这个练习中使用“For”语句,我需要迭代,但不是使用更干净和精简的代码,这会完全阻止我,这就是我请求帮助理解并继续理解和使用这句话的原因。在本例中,结果在一个函数内的JavaScript脚本和3个“For”语句中进行了测试,获得了非常积极的结果,但我无法仅在1中创建它(很抱歉,我的英文谷歌翻译不好)

我用JavasScript在HTML中制作

var letter=“syahsvcxcyxssssssybxavmzsxhzv”;
var contendor=[];
var calc=[];
var mycalc=0;
letter=letter.toUpperCase()
控制台日志(字母)
函数重复(){
对于(变量i=0;i计算[mycalc]){
mycalc=f
}
}
}
重复()

log(“重复次数最多的字母:“+contendor[mycalc])使用正则表达式可能要简洁得多:匹配一个字符,然后查找更多字符,直到可以再次匹配第一个字符:

var letter=“syahsvcxcyxssssssybxavmzsxhzv”;
常量firstRepeatedRegex=/(?=.*\1)/;

console.log(letter.match(firstRepeatedRegex)[1])如果第一个重复的字符是您想要的,您可以将其推入数组并检查该字符是否已经存在

function getFirstRepeating( str ){
    chars = []
    for ( var i = 0; i < str.length; i++){
        var char = str.charAt(i);
        if ( chars.includes( char ) ){
            return char;
        } else {
            chars.push( char );
        }
    }
    return -1;
}
函数getFirstRepeating(str){ 字符=[] 对于(变量i=0;i
这将返回第一个重复字符(如果存在),或者返回-1

工作

函数getFirstRepeating(str){ 字符=[] 对于(变量i=0;ilog(getFirstRepeating(“syahsvcxcyssssybxavmzsxhzv”)
您使用JavaScript对象了吗

你应该调查一下

当你在字符串中循环时

let characters = "hemdhdksksbbd";
let charCount = {};
let max = { count: 0, ch: ""}; // will contain max 
                                                 // rep letter

 //Turn string into an array of letters and for 
  // each letter create a key in the charcount 
 // object , set it to 1 (meaning that's the first of 
 // that letter you've found) and any other time 
 // you see the letter, increment by 1.

characters.split("").forEach(function(character)
{
    if(!charCount[character])
        charCount[character] = 1;
    else
        charCount[character]++;
}
 //charCount should now contain letters and 
  // their counts.
  //Get the letters from charCount and find the 
  // max count
Object.keys(charCount). forEach (function(ch){

        if(max.count < charCount[ch])
              max = { count: charCount[ch], ch: ch};
 }
console.log("most reps is: " , max.ch);
let characters=“hemdhdkskbd”;
让charCount={};
设max={count:0,ch:'};//将包含最大值
//代表信
//将字符串转换为字母数组,然后
//每个字母在charcount中创建一个键
//对象,将其设置为1(表示这是
//你找到的那封信)和其他任何时间
//你看这个字母,递增1。
characters.split(“”).forEach(函数(字符)
{
如果(!charCount[字符])
字符数[字符]=1;
其他的
字符数[字符]+;
}
//charCount现在应该包含字母和
//他们的计数。
//从charCount那里得到信件并找到
//最大计数
key(charCount).forEach(function(ch){
如果(最大计数<字符计数[ch])
max={count:charCount[ch],ch:ch};
}
log(“大多数重复是:”,max.ch);

这是一个非常糟糕的解决方案。它需要两个循环(
reduce
),不处理领带,但它又短又复杂

基本上,继续将结果转换为数组,并使用数组方法
split
reduce
找到答案。第一个
reduce
封装在
Object.entries()
中,将对象转换回数组

let letter=Object.entries(
“SYAHSVCxCxSSSSSSSYBxAVMzSxHzV”。
toUpperCase()。
拆分(“”)。
减少((p,c)=>{
p[c]=isNaN(++p[c])?1:p[c];
返回p;
}, {})
).
减少((p,c)=>p=c[1]>p[1]?c:p);

log(`重复次数最多的字母是${letter[0]},${letter[1]}次。`)
我期望:M
但是
M
字母中根本没有重复?第一个重复的字符是
S
,你到底想要哪一个?哦,对不起,我所提供的信息有误,我立即更正了。我在这里运行你的代码。这是你期望的结果。@RyanNghiem是的,这是结果。。但是我无法实现的是仅用1获得结果,而不是用3获得结果,如果在描述中没有理解,我很抱歉第一个代码段不起作用。如果您在开始时提供另一个字符,并在字符串的其他位置重复该字符(仅2次)。但它表明char作为max。我仍然不完全理解正则表达式的用法,因此在这种情况下很难使用,我是否应该对此进行更多的研究?@SyedMohamedAladeen第一个代码段工作正常-如果在开始处放置另一个字符,并且它也出现在字符串的其他位置,那么该字符将确实是字符串中的第一个重复字符。我想他需要最大重复字符数。正如他在问题中提到的。但问题仍然不清楚。那里的代码片段工作正常,如预期的那样,提供了字符串的最大字符数。@AliDoustkani只匹配连续重复字符,但不匹配,例如,
aba