我正在研究FreeCodeCamp基本算法的脚本编写部分,而我对此有些卡住。
基本上-我需要找到一个句子中最长的单词。
stringArray
和longestString
longestString
中写一个字长,如果它长于最后一个。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'”
答案 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");