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

JavaScript中用charAt()分割字符串时如何去除多余空格(禁split())

解决句子分割单词数组的空格问题

你的核心问题是原代码会把首尾空格、连续空格转换成空字符串元素,这是因为每次遇到空格就直接新增空元素,不管是否连续或在首尾。这里有两种解决思路:

思路一:遍历过程中动态构建单词(推荐)

直接在遍历的时候只处理有效字符,跳过无意义的空格,避免生成空元素:

function sentenceToWordArray(sentence) {
    let stringArray = [];
    let currentWord = "";
    
    for (let i = 0; i < sentence.length; i++) {
        const char = sentence.charAt(i);
        if (char === " ") {
            // 只有当当前有已构建的单词时,才加入数组
            if (currentWord !== "") {
                stringArray.push(currentWord);
                currentWord = "";
            }
        } else {
            currentWord += char;
        }
    }
    // 处理最后一个未被加入的单词
    if (currentWord !== "") {
        stringArray.push(currentWord);
    }
    return stringArray;
}

逻辑说明:

  • 用currentWord临时存储正在拼接的单词,不会一开始就创建空元素
  • 遇到空格时,仅当currentWord不为空(刚完成一个单词)才将其加入数组,连续空格会直接跳过
  • 遍历结束后检查currentWord,避免漏掉句子末尾无空格的单词
  • 首尾空格会被完全忽略,不会生成空字符串元素

思路二:过滤结果中的空字符串

如果不想大幅修改原代码,可以在返回结果前过滤掉所有空字符串:

function sentenceToWordArray(sentence) {
    let stringArray = [""]
    let j = 0
    
    for (let i = 0; i < sentence.length; i++) {
        if (sentence.charAt(i) == " ") {
            j++;
            stringArray.push("")
        } else {
            stringArray[j] += sentence.charAt(i)
        }
    }
    // 过滤空字符串
    return stringArray.filter(word => word !== "");
}

这种方法简单直接,但遍历过程中还是会生成大量空元素,效率不如第一种思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:20:28