我正在学习数组函数,遇到了这个小测验。要从字符串中获得所有大写字母,第一个函数这里的第二个函数可能有什么问题?试图找到解决这个代码。但是不能,在break中,它可以工作,但在continue中不行,第二个函数可能有什么问题?
function getCapsWords(str) {
let result = []; // Empty array
const words = str.split(" "); // array
let i = 0;
while (i < words.length) {
let word = words[i];
word = word[0].toUpperCase() + word.slice(1);
if (word === "Good") break;
result.push(word); // populate arr
i++;
}
return result.join(" ");
}
function getCapsWords(str) {
let result = []; // Empty array
const words = str.split(" "); // array
let i = 0;
while (i < words.length) {
let word = words[i];
word = word[0].toUpperCase() + word.slice(1);
if (word === "Good") continue;
result.push(word); // populate arr
i++;
}
return result.join(" ");
}
getCapsWords("Hello World Good Good Morning!!!");
第二个版本的问题是您在continue
之后有i++
。因此,如果当前单词是Good
,则永远不会增加数组索引,并且会卡在该单词上。
您应该在检查单词是否为Good
之前增加索引。
function getCapsWords(str) {
let result = []; // Empty array
const words = str.split(" "); // array
let i = 0;
while (i < words.length) {
let word = words[i];
word = word[0].toUpperCase() + word.slice(1);
i++;
if (word === "Good") continue;
result.push(word); // populate arr
}
return result.join(" ");
}
或者使用for
循环代替while
,这样增量不受循环体的控制。
function getCapsWords(str) {
let result = []; // Empty array
const words = str.split(" "); // array
fir (let i = 0; i < words.length; i++) {
let word = words[i];
word = word[0].toUpperCase() + word.slice(1);
if (word === "Good") continue;
result.push(word); // populate arr
}
return result.join(" ");
}