如何访问循环中以前的值



我对JS编程有点陌生,如果这是一个明显的问题,我很抱歉。我有一个代码,可以计算字符串中重复的字母。代码应该只输出使用两次以上的字母。

例如:

let str = "HELLOWORLD"

输出应为:L = 3, O = 3

我的代码输出:L =3, O = 2, O =2, L = 3

我想摆脱第二个O和L.

function repeat(){
let str = "helloworld";
let letters = "";
let count = "";
let output = "";
let x = "";
for (i = 0; i <str.length; i++){
letters = str.charAt(i); 
count = str.split(letters).length - 1;
if (count >= 2 && x !== letters) {
output += letters +"=" + count + " ";
}
x = letters;
}
console.log(output);
}
repeat();

由于x = letters;代码的原因,我只能删除新字母之前的重复字母。我希望角色只出现一次,但我很难处理循环。我知道它看起来很乱,需要改进,但我会在找到解决方案后再做。任何建议都将不胜感激!

您可以在数组中保留重复的字母,然后检查该字母是否已经存在。

function repeat(){
let str = "helloworld";
let letters = "";
let count = "";
let output = "";
let x = "";
let multipleChars = [];
for (i = 0; i <str.length; i++){
letters = str.charAt(i);
count = str.split(letters).length - 1;
if (count >= 2 && x !== letters && !multipleChars.includes(letters)) {
output += letters +"=" + count + " ";
multipleChars.push(letters);
}
x = letters;
}
console.log(output);
}
repeat();

您可以这样做:

var strs = "helloworld";
const output = strs.split('').reduce(function(prev, cur) {
prev[cur] = (prev[cur] || 0) + 1;
return prev;
}, {});
const convertToArray = Object.entries(output);
const filterMorethan2 = convertToArray.filter(([key, value]) => value >= 2);
const converBackObj = Object.fromEntries(filterMorethan2);
console.log(converBackObj)

快乐编码!!!

使用js工具箱:

let str = 'HelloWorld';
let a = Object.entries([...str].reduce((r,c)=>{
r[c]=(r[c] || 0) +1;
return r;
},{})).filter(e=>e[1]>2).sort(([,a],[,b]) => b-a).reduce((s,i,idx)=>(`${s}${idx>0 ? ", " : ""}${i.join('=')}`),'');
console.log(a);

一种常见的方法是使用对象来维护字母的计数-字母是属性键,值是每当找到该字母时就会增加的数字。然后,我们可以在该对象上循环,并只记录那些值大于2的属性。

function repeat(str) {
// Create the object
const obj = {};
// Loop over the string
for (let i = 0; i < str.length; i++) {
const letter = str[i];
// If the letter (key) doesn't already exist
// on the object create it, and set the value to zero
// then immediately increase it by one
if (obj[letter] === undefined) {
obj[letter] = 0;
}
obj[letter] += 1;
}
// So we have an object that contains _all_ the
// letters, so now we loop over it to print out
// only those with values greater than two
// We can use a template string:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
for (let letter in obj) {
if (obj[letter] > 2) {
console.log(`${letter} = ${obj[letter]}`);
}  
}
}
repeat('helloworld');

最新更新