我想知道为什么下面的代码返回内存分配错误?
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);
};