if 语句无法在 for 循环中运行?
2019-08-26
101
我正在研究 FreeCodeCamp 基本算法脚本部分,但在这一部分上我有点卡住了。
基本上 - 我需要找到一个句子中最长的单词。
-
我设置了两个变量,
stringArray
和longestString
- 我将参数中的每个单词设置为数组中的一个项目
-
我遍历该数组,如果单词长度比上一个单词长,则将单词长度写入变量
longestString
。 -
我返回变量
longestString
为什么这不起作用?
在评估
longestString.length
时,我不断收到错误:
undefined is not an object
似乎 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");
上面的代码产生错误:
"Uncaught TypeError: Cannot read property 'length' of undefined"
3个回答
要修复您的代码,您需要为
longestString
指定一个初始值,在循环中使用
<
而不是
<=
,并分配实际字符串而不是其长度(在 if 内部)
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);
Taki
2019-08-26
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)
另一个问题是您在循环中使用
<=
检查了太多索引
epascarello
2019-08-26
需要初始化
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)
Dominik Matis
2019-08-26