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

求助:无需内置函数实现JavaScript按单词反转字符串的方案

解决字符串中每个单词反转的问题(无内置函数)

嘿,我来帮你搞定这个问题!你想要实现的是把字符串里的每个单词单独反转,最终得到CBA FED IHG LKJ对吧?先聊聊你现有代码里的几个关键问题:

  • 字符串不可变性:在JavaScript里,字符串是不能直接通过下标修改的,你给str[k]赋值的操作根本不会生效,必须先把字符串转换成数组来操作。
  • 循环逻辑错误:内层循环的条件k < j-1完全不对,k初始值是j(空格的位置),j肯定比j-1大,这个循环根本不会执行,自然没法反转单词。
  • 遗漏最后一个单词:你的代码只在遇到空格时处理前面的单词,但最后一个单词后面没有空格,导致它永远不会被反转。

正确的实现思路

我们手动实现整个流程,完全不用内置的split()、reverse()这类函数:

  1. 把原字符串转换成字符数组,方便修改
  2. 遍历数组,记录每个单词的起始索引
  3. 当遇到空格或者遍历到数组末尾时,反转从起始索引到当前位置前一个的字符区间
  4. 最后把反转后的字符数组转回字符串

完整代码实现

var str = 'ABC DEF GHI JKL';
// 转成字符数组,因为字符串不可变
var charArr = [];
for (var i = 0; i < str.length; i++) {
    charArr.push(str[i]);
}

var startIndex = 0; // 记录每个单词的起始位置

for (var i = 0; i <= charArr.length; i++) {
    // 遇到空格或者到达数组末尾时,反转当前单词
    if (i === charArr.length || charArr[i] === ' ') {
        var left = startIndex;
        var right = i - 1; // 单词的最后一个字符索引
        
        // 手动反转单词:交换左右指针的字符,直到中间
        while (left < right) {
            var temp = charArr[left];
            charArr[left] = charArr[right];
            charArr[right] = temp;
            left++;
            right--;
        }
        
        startIndex = i + 1; // 更新下一个单词的起始位置
    }
}

// 把数组转回字符串
var result = '';
for (var i = 0; i < charArr.length; i++) {
    result += charArr[i];
}

document.write(result); // 输出:CBA FED IHG LKJ

代码解释

  • 第一步把字符串转成数组:因为JS字符串不可变,必须用数组来修改字符位置
  • 用startIndex跟踪每个单词的开头,遇到空格或末尾时,就反转[startIndex, i-1]这个区间的字符
  • 手动反转单词:用双指针法,左指针从单词开头,右指针从单词结尾,交换两者的字符,直到指针相遇,这样就完成了单词的反转
  • 最后把数组拼接回字符串,得到最终结果

内容的提问来源于stack exchange,提问作者aaqib90

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:33