将参数拆分为一个数组,现在在子作用域中获取未定义



我收到错误:

未捕获的类型错误:无法读取第 5 行上未定义的属性"长度"

当我将其输入控制台时。我不确定为什么当它被拆分成一个数组然后传递到 for 循环中时,它说senArr[i]undefined

我一直在试图弄清楚为什么会出现此错误......

-for 循环确实可以访问父范围

-senArr 被拆分为一个数组,我认为获取存储在每个索引中的字符串的长度没有任何问题。

出于想法,我开始认为问题出在代码中的其他地方。

function LongestWord(sen) { 
var senArr = sen.split(' ');
var longestWord = senArr[0];
for (let i = 1; i <= senArr.length; i++) {
if (senArr[i].length > longestWord.length) {
longestWord = senArr[i];   
} 
} return longestWord; 
}

啊,将<=更改为<,因为数组中的最后一个索引是senArr.length - 1

function LongestWord(sen) {
var senArr = sen.split(' ');
var longestWord = senArr[0];
for (let i = 1; i < senArr.length; i++) {
console.log('i is ', i, ' and word is ', senArr[i]);
if (senArr[i].length > longestWord.length) {
longestWord = senArr[i];
}
}
return longestWord;
}
console.log(LongestWord('hi there this is a test'));

有了<=,你超出了最后一个索引(i在上面的示例中变成了6(,并且该索引处没有字符串,这就是你看到错误的原因。

问题是当您与 <= 进行比较时,您包括数组长度+1 请注意,数组是从零开始的索引,因此最后一项是 length-1

来了...

var LongestWord = (sen) => { 
var senArr = sen.split(' ');
console.log(senArr);
var longestWord = '';
for (let i = 0; i <= senArr.length - 1; i++) {
if (senArr[i].length > longestWord.length) {
longestWord = senArr[i];   
} 
} return longestWord; 
}

console.log(LongestWord('alongword is the longest'));

我刚刚将其转换为现代JavaScript并且它可以工作:-(

function LongestWord(sentence) { 
const words = sentence.split(' ');
let longest = '';
for (let word of words) {
if (word.length > longest.length) {
longest = word;
} 
} return longest; 
}
// notice that 'bar' is actually not the longest word
// but the first of all longest words
longestWord('fo bar baz'); // 'bar'

最新更新