首页 > 解决方案 > 这里的第二个功能可能有什么问题?

问题描述

我正在学习数组函数并遇到了这个测验。要从字符串中获取所有大写字母,第一个函数这里的第二个函数可能有什么问题?试图找到此代码的解决方案。但是不能,用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!!!");

标签: javascriptarraysif-statement

解决方案


第二个版本的问题是你有i++after continue。因此,如果当前单词是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(" ");
}

推荐阅读