JS分割单词代码报semi-space copy allocation failed内存溢出原因咨询
报错根因
- 你的代码内层
while循环没有做索引越界判断:当输入句子的末尾字符不是空格时,循环内的i会持续自增超过sentence.length,此时sentence[i]返回undefined,永远满足!== ' '的判断条件,程序进入死循环。 - 死循环运行过程中,
word变量会持续拼接undefined值,占用内存持续上涨,最终触发JavaScript堆内存分配失败的报错。
修复方案
只需在while循环的判断条件中新增索引边界校验即可:
var countValidWords = function(sentence) { let words = []; for(let i = 0; i < sentence.length; ++i){ let word = ''; // 新增i < sentence.length边界判断,避免索引越界死循环 while(i < sentence.length && sentence[i] !== ' '){ word += sentence[i]; ++i; } if(word !== '') words.push(word); } console.log(words); };
可选优化
如果你不需要手动实现分割逻辑,直接调用JS原生API可以更简洁地实现按任意多个空格分割单词的需求:
const words = sentence.trim().split(/\s+/)
该实现会自动忽略开头、结尾的空格,以及单词之间的多个连续空格。
内容的提问来源于stack exchange,提问作者zarya
相关产品推荐
相关产品推荐

