You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:09:55