JavaScript字符重复功能实现求助:字符重复次数为原频次+1
解决JavaScript字符重复原出现次数+1的问题
你想要实现的功能很明确:输入字符串后,返回每个字符重复原出现次数+1次的新字符串——比如输入"yeah"得到"yyeeaahh",输入"yyeaaahhh"得到"yyyeeaaaahhhh"。你的思路方向是对的,但现有代码有几个小问题,咱们一步步修正:
首先,优化字符计数逻辑
你原来的代码里,每次循环都用string.match(new RegExp(strArr[i], "g"))统计字符次数,这会重复遍历整个字符串N次(N是字符串长度),效率很低。咱们改成一次遍历完成统计:
const counts = {}; for (const char of strArr) { counts[char] = (counts[char] || 0) + 1; }
这段代码只需要遍历一次字符数组,每个字符的计数就完成了,时间复杂度从O(n²)降到了O(n),高效很多。
然后,解决你卡住的键值对映射问题
你用Object.entries(counts)拿到了[[字符, 次数], ...]的数组,但错误地用for...in遍历数组——for...in是用来遍历对象属性的,遍历数组时它拿到的是字符串类型的索引(比如"0"、"1"),不是你需要的键值对。
这里推荐用更简洁的map方法,一行就能完成映射:
const newStrArr = countArr.map(([key, value]) => key.repeat(value + 1));
如果习惯用循环,就用for...of(专门遍历可迭代对象,比如数组):
const newStrArr = []; for (const [key, value] of countArr) { newStrArr.push(key.repeat(value + 1)); }
最后,拼接成目标字符串
你现在的函数返回的是数组,需要用join('')把数组元素拼接成完整字符串。
完整修正后的代码
function newString(string) { const strArr = string.split(''); // 一次遍历完成字符计数 const counts = {}; for (const char of strArr) { counts[char] = (counts[char] || 0) + 1; } // 将键值对映射为重复后的字符串数组 const countArr = Object.entries(counts); const newStrArr = countArr.map(([key, value]) => key.repeat(value + 1)); // 拼接成最终结果返回 return newStrArr.join(''); } // 测试验证 console.log(newString("yeah")); // 输出 "yyeeaahh" console.log(newString("yyeaaahhh")); // 输出 "yyyeeaaaahhhh"
内容的提问来源于stack exchange,提问作者pythonRCNewbie
相关产品推荐
相关产品推荐

