if语句不会在for循环中运行?

时间:2019-08-26 18:23:57

标签: javascript arrays for-loop if-statement

我正在研究FreeCodeCamp基本算法的脚本编写部分,而我对此有些卡住。

基本上-我需要找到一个句子中最长的单词。

  1. 我设置了两个变量stringArraylongestString
  2. 我将参数中的每个单词设置为数组中的一个项
  3. 我遍历该数组,并在变量longestString中写一个字长,如果它长于最后一个。
  4. 我返回变量longestString

为什么这不起作用?

在评估longestString.length时,我不断收到错误消息:

  

未定义不是对象

似乎 if 语句未在我的 for 循环中运行。有什么想法吗?

谢谢!

let stringArray = [];
let longestString;
function findLongestWordLength(str) {
  stringArray = str.split(' ')
  console.log(stringArray);
  for (let i = 0; i <= stringArray.length; i++){
    if (stringArray[i].length > longestString.length){
      longestString = stringArray[i].length
    }
  }
  return longestString
}

findLongestWordLength("The quick brown fox jumped over the lazy dog");

上面的代码产生错误:

  

“未捕获的TypeError:无法读取未定义的属性'length'”

5 个答案:

答案 0 :(得分:2)

要修复代码,您需要给longestString一个初始值,在循环中使用<而不是<=并分配实际的字符串而不是其长度(如果)

let stringArray = [];
let longestString;
function findLongestWordLength(str) {
  stringArray = str.split(" ");
  longestString = stringArray[0]; // give longestString an initial value
  for (let i = 0; i < stringArray.length; i++) { // use < instead of <=
    if (stringArray[i].length > longestString.length) {
      longestString = stringArray[i]; // assign the string not the length
    }
  }

  return longestString;
}

var result = findLongestWordLength("The quick brown fox jumped over the lazy dog");
console.log(result);

您可以使用此技巧来缩短功能:将字符串分成单词数组,然后按单词长度排序,然后选择第一个:

function findLongestWordLength(str) {
  const longest = str.split(" ").sort((a, b) => b.length - a.length)[0];
  return longest;
}

const result = findLongestWordLength("The quick brown fox jumped over the lazy dog");
console.log(result);

答案 1 :(得分:0)

需要初始化longestString变量

您也可以这样

let stringArray = [];
let longestString;
function findLongestWordLength(str) {
  stringArray = str.trim().split(' ')
  stringArray = stringArray.sort((a, b) => a.length > b.length ? -1 : (a.length == b.length ? 0 : 1));
  console.log(stringArray)
  return stringArray[0].length
}

let result = findLongestWordLength("The quick brown fox jumps over the lazy dog")
console.log(result)

修复后的解决方案:

let stringArray = [];
let longestString;
function findLongestWordLength(str) {
  stringArray = str.split(' ')
  console.log(stringArray);
  longestString = stringArray[0];
  for (let i = 0; i < longestString.length; i++){
    if (stringArray[i].length > longestString.length){
      longestString = stringArray[i].length
    }
  }
  return longestString
}

let result = findLongestWordLength("The quick brown fox jumped over the lazy dog");
console.log(result)

答案 2 :(得分:0)

let longestString; <-设置为未定义

在您的第一个循环中,您会阅读并检查其长度。好的未定义值没有长度。

该怎么办?

将其设置为空字符串,或者在读取长度之前检查以确保已设置字符串。

这样您就可以

let longestString = "";

if (!longestString || stringArray[i].length > longestString.length){

或大多数人将其设置为第一个索引

function findLongestWordLength(str) {
  // Don't define these outside or they will be reused!
  const stringArray = str.split(' ')
  // set to first index
  let longestString = stringArray[0]
  // start loop at 2nd index
  for (let i = 1; i < stringArray.length; i++){
    if (stringArray[i].length > longestString.length){
      longestString = stringArray[i].length
    }
  }
  return longestString
}

const result = findLongestWordLength("The quick brown fox jumped over the lazy dog");
console.log(result)

另一个问题是您使用<=

在循环中检查了太多索引

答案 3 :(得分:0)

您有<=,因此循环将额外运行1次,因为该数组在该索引处的项目未定义。

function findLongestWordLength(str) {
  let stringArray = str.split(' ')
  let longestString = ''
  for (let i = 0; i < stringArray.length; i++){
    if (stringArray[i].length > longestString.length){
      longestString = stringArray[i]
    }
  }
  return longestString
}

findLongestWordLength("The quick brown fox jumped over the lazy dog");

答案 4 :(得分:0)

由于索引的最后一个值为.length of undefined,因为您检查的索引小于或等于undefined,因此出现了<=错误。

如果您的数组有5个元素,那么您可以获得索引最高为array[4]的值。

const array = [1, 2, 3, 4, 5];
console.log(array[4]); // 5

如果您尝试访问数组长度为5的值,则会得到undefined

const array = [1, 2, 3, 4, 5];
console.log(array[5]); // undefined 

    let stringArray = [];
let lgStr = null;

function maxLength(str) {
        const array = str.split(' ');
        for (let i = 0; i < array.length; i += 1) {
                const elem = array[i];
                if (i === 0) {
                        lgStr = elem;
                }
                if (elem.length > lgStr.length) {
                        lgStr = elem;
                }
        }

        console.log(lgStr);
        return lgStr;
}

maxLength("The quick brown fox jumped over the lazy dog"); 

     

您可以使用.sort()使其非常简单;

   
  function maxLength(str) {
        const lgStr = str.split(' ').sort((a, b) => {
                return b.length - a.length;
        })[0];
        console.log(lgStr);
        return lgStr;
}

maxLength("The quick brown fox jumped over the lazy dog"); 

相关问题