JavaScript中如何交换字符串的字符位置——解密函数开发卡点求助
解决字符串第二个与最后一个字母交换的问题
我看你在解密函数里的字符串交换环节卡壳了,咱们来一步步搞定这个问题!
首先,你的思路是对的——用substring确实比replace更适合这个场景,但原代码里的substring(2,3)有个关键问题:它只能获取单个字符(索引2的位置),如果单词长度超过4,中间的其他字符就会被漏掉。比如你举的"Hello"例子,原代码处理后会丢失第二个"l",得不到预期的"Holle"。
修正后的代码
咱们调整交换逻辑,确保中间所有字符都被保留,同时加上边界情况的处理:
function decipher(str) { let s = "" for (let word of str.split(" ")){ // 提取数字并转换为对应ASCII字符 let dig = word.match(/\d+/)[0] word = word.replace(dig, String.fromCharCode(dig)) // 处理短单词的边界情况:长度≤2时无需交换 if (word.length <= 2) { s += word + " " continue } let secondLetter = word[1] let lastLetter = word[word.length - 1] // 拼接规则:首字符 + 最后一个字符 + 中间全部字符(索引2到倒数第二个) + 第二个字符 let swapped = word[0] + lastLetter + word.substring(2, word.length - 1) + secondLetter s += swapped + " " } // 去除循环拼接时产生的末尾多余空格 return s.trim() };
关键逻辑说明
- 边界处理:增加了单词长度≤2的判断,避免索引越界,同时短单词也不需要交换操作;
- 正确截取中间字符:
word.substring(2, word.length - 1)会获取从索引2开始,到倒数第二个字符结束的所有内容,确保中间的字符一个都不会丢; - 优化返回结果:用
trim()去掉末尾多余的空格,让输出更整洁。
测试你的例子
当处理"Hello"时:
word[0]= "H"lastLetter= "o"word.substring(2,4)= "ll"secondLetter= "e"- 拼接后得到:
H + o + ll + e= "Holle",完全符合你的预期!
内容的提问来源于stack exchange,提问作者tarik
相关产品推荐
相关产品推荐

