我正在尝试编写一个小程序,它返回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:我只是个新手,如果我的逻辑或算法错误,请纠正我。
答案 0 :(得分:1)
首先,你的逻辑不正确得到最长的单词。你应该在var longest
之外声明for loop
,如果不是,它会在下一次循环时初始化新值。你得到的未定义是作为数组密钥在sen_arr
中不存在,因为您使用的是+1,如果i
为2将变为3.这就是您得到的未定义错误。
sen_arr
为[0=>Argument,1=>goes,2=>here]
//密钥3不存在
[功能1]
function LongestWord(sen) {
var sen_arr = sen.split(" ");
var longest;//declare here
for (var i = 0 ; i < sen_arr.length; i++ ) {
/*var*/ longest = sen_arr[i]; //shouldn't declare here
(i < 2) ? j = i+1 : j = i; //do +1 if i is less than 2
if (sen_arr[i].length >= sen_arr[j].length) {
longest = sen_arr[j];
} else {
longest = sen_arr[i];
}
}
return longest;
}
[功能2]
function LongestWord(sen) {
var sen_arr = sen.split(" "),longest = 0,index;
for (var i = 0 ; i < sen_arr.length; i++ ) {
if(longest < sen_arr[i].length) {
longest = sen_arr[i].length;
index = i;
}
}
longest = sen_arr[index];
return longest;
}
LongestWord("Argument goes here"); //return Argument
LongestWord("Argument goes hereherheherhe");//return hereherheherhe
注意:函数1获取最长单词不正确,但函数2正确
答案 1 :(得分:0)
句子中最长的单词
function longWord(senten){
var arraysize = senten.split(" ");
console.log(arraysize.length);
var arr=[];
for(let i = 0;i<arraysize.length;i++){
arr.push(arraysize[i].length);
}
console.log(arr);
console.log(Math.max.apply(null, arr));
var final;
for(let i = 0;i<arr.length;i++){
if(Math.max.apply(null, arr)==arr[i]){
final = arraysize[i];
}
}
return final;
}
console.log(longWord("How are u friends welcome to javascript Program"));