首页 > 解决方案 > 为什么这个 JavaScript 实现查找最大单词返回 TypeError: Cannot read properties of undefined (reading 'length')

问题描述

为什么下面的代码会返回错误?str 绝对是一个字符串,所以它不是未定义的。words 是一个数组,因此在其上调用 .length 也应该是有效的。这个实现有什么问题?

TypeError:无法读取未定义的属性(读取“长度”)

function findLongestWordLength(str) {
  let words = str.split(" ");
  let longword = words[0];
  for(let i = 0; words.length <= terminal; i++){
    if(words[i].length >= longword.length){
      longword = words[i]
    }
  }
  let longwordlength = longword.length;
  return longwordlength;
}

findLongestWordLength("The quick brown fox jumped over the lazy dog");
// why is this giving the error: TypeError: Cannot read properties of undefined (reading 'length')

标签: javascript

解决方案


您的for循环条件不正确。它应该是是否i小于单词数,因为您正在遍历每个单词:

function findLongestWordLength(str) {
  let words = str.split(" ");
  let longword = words[0];
  for(let i = 0; i < words.length; i++){
    if(words[i].length >= longword.length){
      longword = words[i]
    }
  }
  let longwordlength = longword.length;
  return longwordlength;
}

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

然而,完成这个任务的更简单的方法是用空格分割字符串,映射单词并获取每个单词的长度,然后使用Math.max扩展语法得到最大的项目:

function findLongestWordLength(str) {
  return Math.max(...str.split(" ").map(e => e.length))
}

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


推荐阅读