【问题标题】:comparing the i from loop with the next value将 i from 循环与下一个值进行比较
【发布时间】: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 &lt; 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


【解决方案1】:

首先,获取最长单词的逻辑不正确。此外,您应该在for loop 之外声明var longest,如果不是,它将在下一次循环时初始化新值。您得到未定义的是数组键不是' t 存在于 sen_arr 中,因为您使用的是 +1,所以如果 i 为 2 将变为 3。这就是您得到未定义错误的原因。

sen_arr 拆分后为[0=&gt;Argument,1=&gt;goes,2=&gt;here] // key 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是正确的

【讨论】:

    【解决方案2】:

    句子中最长的单词

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

    【讨论】:

    • 虽然此功能可能有效,但它不能回答所提出的问题。你能提供理由和解释吗?
    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多