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
相关产品推荐
相关产品推荐

