将循环中的i与下一个值进行比较

时间:2016-04-08 02:05:09

标签: javascript arrays loops for-loop

我正在尝试编写一个小程序,它返回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:我只是个新手,如果我的逻辑或算法错误,请纠正我。

2 个答案:

答案 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"));