【发布时间】:2016-04-08 02:05:09
【问题描述】:
我正在尝试编写一个小程序,在 javascript 中返回一个句子中最长的单词,我只是不明白为什么这个错误消息不断弹出: “TypeError: sen_arr[(i + 1)] 未定义。”
function LongestWord(sen) {
var sen_arr = sen.split(" ");
for (var i = 0 ; i < sen_arr.length; i++ ) {
var longest = sen_arr[i];
if (sen_arr[i].length >= sen_arr[i + 1].length) {
longest = sen_arr[i + 1];
} else {
longest = sen_arr[i];
}
}
return longest;
}
LongestWord("Argument goes here");
如果定义了 sen_arr 并且定义了 i,那么为什么没有定义 sen_arr[i+1]?
Ps:我只是新手,如果我的逻辑或算法有错误,请纠正我。
【问题讨论】:
-
对于这个输入字符串:
"Foo",它由一个单词组成,“下一个单词”是什么? -
在你的for循环中使用
for (var i = 0 ; i < sen_arr.length - 1; i++ ),你会得到这样的东西:sen_arr.length[i + 1]所以在最后,或者如果数组只有一个单词,它将是未定义的。 -
您只比较相邻元素的想法是不正确的。考虑“verylonglong”、“s”、“s”、“s”、“ss”、“s”、“s”。 -- 假设您没有尝试索引超出数组末尾,在最后的迭代中,您将比较最后两个元素 's' 和 's',然后得出其中一个最长的结论。显然“verylonglong”是最长的元素。您需要确保记住迄今为止遇到的最长元素是什么,并与之进行比较。
标签: javascript arrays loops for-loop