繁体   English   中英

Javascript:替换字符串中的重复字符?

[英]Javascript: Replace repeated character in a string?

我一直在解决 codewars 上的 katas,我偶然发现了一个我似乎无法找到答案的通用代码问题。

这是我的代码:

function wave(str) {
   let arr = [];
   for (var i = 0; i < str.length; i++) {
       str[i].match(/\S/) && arr.push(str.replace(str[i], str[i].toUpperCase()));
   }
   return arr;
 };

(注意:输入总是小写。) 在wave("abc def");的情况下wave("abc def"); 代码完全符合我的要求:

["Abc def", "aBc def", "abC def", "abc Def", "abc dEf", "abc deF"]

=> 函数接受一个字符串,将字符串中从str[0]开始的一个字母大写,将新单词推送到arr ,递增i并重复过程直到i < str.length ,然后返回arr和所有结果。

但是,如果我输入wave("acc def"); 例如,只有第一次出现字母c才会返回大写:

["Acc def", "aCc def", "aCc def", "acc Def", "acc dEf", "acc deF"]

问题:为什么它会“跳转”第二次出现的 'c' 以及如何定位字符串中第二次或第 n 次出现的字符?

str.replace("x", "y")str.replace("x", "y")替换str第一次出现的"x" "y"
如果字符串中只有唯一字符,则您的方法有效,但是当出现"acc def"等重复字符时,它将失败

您可以将.slice()字符串分成三部分:

  • i -> .slice(0, i)左边的部分
  • 索引i -> str[i]处的字符
  • 索引i -> .slice(i + 1)之后的剩余部分

根据需要修改str[i]并使用.join("")将它们组合回单个字符串

 function wave(str) { const result = []; for (let i = 0; i < str.length; i++) { if (!str[i].match(/\\S/)) continue; result.push([ str.slice(0, i), /* the part left of str[i] */ str[i].toUpperCase(), /* str[i] */ str.slice(i + 1) /* the remaining part right of str[i] */ ].join("")) // combine the parts in the array into a string } return result; }; console.log(JSON.stringify(wave("abc def"))); console.log(JSON.stringify(wave("acc def")));

当你说str.replace(str[i], str[i].toUpperCase())你说: “替换第一次出现的str[i]str[i].toUpperCase()这是正是你的程序在做什么。

考虑像这样构建你的新字符串:

str.substring(0, i) + str[i].toUpperCase() + str.substring(i+1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM