半空间拷贝分配失败,javascript堆内存不足



我想知道为什么下面的代码返回内存分配错误?

var countValidWords = function(sentence) {
let words = [];
for(let i = 0; i < sentence.length; ++i){
let word = '';
while(sentence[i] !== ' '){
word += sentence[i];
++i;
}
if(word !== '')
words.push(word);
}
console.log(words);
};

我只是想从输入的句子中构建一个单词数组(单词可以用一个以上的空格分隔)。

如果句子不以空格结束,则while循环永远不会结束,因为它不会检查它是否超过了字符串的末尾。因此,您将进入一个无限循环,将undefined附加到word,直到内存耗尽。

添加一个检查i是否在字符串长度范围内。

var countValidWords = function(sentence) {
let words = [];
for(let i = 0; i < sentence.length; ++i){
let word = '';
while(i < sentence.length && sentence[i] !== ' '){
word += sentence[i];
++i;
}
if(word !== '')
words.push(word);
}
console.log(words);
};

while子句需要检查i是否越界:

while(i < sentence.length && sentence[i] !== ' ')

这个怎么样?这不是你能找到的最优化的版本,但它是有效的。while语句有一个无限循环

var countValidWords = function(sentence) {
let words = [];
let word = ''
for(let i = 0; i < sentence.length; ++i){
if(sentence[i] != '' && sentence[i] != ' '){
word += sentence[i];
}
if(sentence[i] == ' ' || sentence[i + 1] === undefined){
words.push(word);
word = '';
}
}
console.log(words);
};

相关内容

  • 没有找到相关文章