如何在JavaScript中交换字符串变量的指定相邻字符
JavaScript实现指定相邻字符对交换的两种方案
对应需求场景:
- 初始定义字符串变量:
let string = 'abcdefghij' - 调整规则:将相邻子串
cd调换为dc、相邻子串gh调换为hg,其余字符保持原顺序不变 - 预期最终输出:
abdcefhgij
方法1:固定子串定向替换(适配当前固定替换场景)
待交换的cd、gh子串在原字符串中均唯一存在,直接调用字符串内置的replace方法完成替换,代码量最少:
- 链式调用两次替换方法,分别匹配两组相邻子串完成调换
let string = 'abcdefghij'; string = string.replace('cd', 'dc').replace('gh', 'hg'); console.log(string); // 输出 abdcefhgij,完全匹配预期结果
适用注意:该方法仅适用于待替换子串在原字符串中无重复的场景,如果同名字串多次出现,会出现误伤替换的问题。
方法2:按索引位置交换(适配灵活的位置类交换需求)
JavaScript字符串本身是不可变值,无法直接通过索引修改单个字符,需要先将字符串转为可修改的字符数组,再按指定的相邻位置完成交换,不受字符串内容重复的影响:
- 实现步骤:
- 用
split('')将字符串拆分为单字符数组 - 定位两组待交换相邻对的索引:原串中
c的索引为2(对应相邻对索引2、3),g的索引为6(对应相邻对索引6、7) - 利用解构赋值直接交换对应索引的数组元素,最后用
join('')重新拼接为字符串
- 用
let string = 'abcdefghij'; const charList = string.split(''); // 定义所有需要交换的相邻对索引 const swapIndexPairs = [[2, 3], [6, 7]]; swapIndexPairs.forEach(([i, j]) => { // 直接解构交换两个位置的值 [charList[i], charList[j]] = [charList[j], charList[i]]; }); string = charList.join(''); console.log(string); // 输出 abdcefhgij
适用优势:交换逻辑只和位置索引绑定,和位置上的字符内容无关,不会因为字符串内重复出现同名字串导致错误,适合后续有自定义交换位置的灵活需求。
内容的提问来源于stack exchange,提问作者PVD
相关产品推荐
相关产品推荐

