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