如何编写JavaScript函数:从字符串末尾起每n个字符插入指定字符
问题分析与解决方案
你的代码存在几个核心问题:
- 遍历方向搞反了:需求要求从字符串末尾开始处理,但你是从开头(
i=0)开始循环 slice结果未实际使用:你调用了str.slice(i, i+n)但没把这个片段参与后续拼接,直接给原字符串追加c,导致结果只是在原字符串后面重复加c- 未处理边界:没有判断是否是最后一组,会在不需要的位置插入多余的
c
正确实现方法
我们可以利用反转字符串的技巧,把从末尾处理的问题转换成从开头处理的常规问题,步骤如下:
- 反转原字符串,让原字符串的末尾变成开头,这样就能用从左到右的方式分组
- 把反转后的字符串按每
n个字符分割成数组 - 用字符
c连接数组中的分组,最后再反转回原顺序,就得到了从末尾开始插入的效果
function insertFromEnd(str, c, n) { // 处理边界情况:n无效或字符串为空时直接返回原字符串 if (n <= 0 || str.length === 0) return str; // 反转字符串,将末尾处理转为开头处理 const reversedStr = str.split('').reverse().join(''); const chunks = []; // 按每n个字符分割反转后的字符串 for (let i = 0; i < reversedStr.length; i += n) { chunks.push(reversedStr.slice(i, i + n)); } // 用c连接分组,再反转回原顺序 return chunks.join(c).split('').reverse().join(''); } // 测试示例 console.log(insertFromEnd("apple", "c", 2)); // 输出 "acppcle" console.log(insertFromEnd("1234567", ",", 3)); // 输出 "1,234,567" console.log(insertFromEnd("abc", "-", 2)); // 输出 "a-bc"
逻辑验证
以insertFromEnd("apple", "c", 2)为例:
- 原字符串
"apple"反转后为"elppa" - 按每2个字符分割成
["el", "pp", "a"] - 用
"c"连接得到"elcppca" - 反转回原顺序,最终结果为
"acppcle"
内容的提问来源于stack exchange,提问作者Irfan
相关产品推荐
相关产品推荐

