我正在
TypeError:无法读取未定义的属性“length”
在下面的代码上。具体而言,错误与newStr[i].length
命令有关。正如您所看到的(已注释掉)我测试过并且可以确认newStr[1]
存在:
function findLongestWord(str) {
var expression = /\w+/g;
var newStr = str.match(expression);
// return newStr[1].length;
var longestWord = "";
for (var i = 1; i < (newStr.length + 1); i++) {
if (newStr[i].length > newStr[i - 1].length) {
longestWord = newStr[i];
} else {
longestWord = longestWord;
}
}
return longestWord;
}
console.log(findLongestWord("The quick brown fox jumped over the lazy dog"));
有什么想法吗?
答案 0 :(得分:1)
你的循环是一个接一个。输出还不正确(输出&#39;懒惰&#39;)。您需要与longestWord
进行比较,而不是前一个单词。
function findLongestWord(str) {
var expression = /\w+/g;
var newStr = str.match(expression);
// return newStr[1].length;
var longestWord = "";
for (var i = 1; i < newStr.length; i++) { // fixed off-by-one
if (newStr[i].length > longestWord.length) { // compare to longestWord
longestWord = newStr[i];
} else {
longestWord = longestWord;
}
}
return longestWord;
}
console.log(findLongestWord("The quick brown fox jumped over the lazy dog"));
提供"jumped"
。
答案 1 :(得分:0)
for (var i = 1; i < (newStr.length + 1); i++) {
newStr.length将是e。 G。 4,然后我将运行最多4,但newStr [4]不存在。所以它也没有长度。
你可以把整个东西缩短一点:
function findLongestWord(str) {
return str.split(" ").reduce((longest,curr)=>curr.length>longest.length?curr:longest,"");
}
答案 2 :(得分:0)
问题在于您如何编制索引。执行i < newStr.length + 1
与执行i <= newStr.length
相同。由于所有内容均为0索引,因此您尝试访问newStr[newStr.length]
处的内容,但最后一个元素位于newStr[newStr.length - 1]
。
这里有正确索引的代码:
function findLongestWord(str) {
var expression = /\w+/g;
var newStr = str.match(expression);
var longestWord = "";
for (var i = 0; i < newStr.length; i++) {
if (newStr[i].length > newStr[i - 1].length) {
longestWord = newStr[i];
} else {
longestWord = longestWord;
}
}
return longestWord;
}
console.log(findLongestWord("The quick brown fox jumped over the lazy dog"));
&#13;
但是,你的逻辑也存在缺陷。如果您想找到最长的单词,您不希望将每个单词与前一个单词进行比较。你想比较你到目前为止发现的最长单词与你找到的每个单词。
function findLongestWord(str) {
var expression = /\w+/g;
var newStr = str.match(expression);
var longestWord = "";
for (var i = 0; i < newStr.length; i++) {
/***********************************/
if (newStr[i].length > longestWord.length) {
longestWord = newStr[i];
}
/***********************************/
}
return longestWord;
}
console.log(findLongestWord("The quick brown fox jumped over the lazy dog"));
&#13;