【问题标题】:I can't seem to get this function to work right我似乎无法让这个功能正常工作
【发布时间】:2015-12-18 07:30:26
【问题描述】:

我正在研究最长的单词 coderbyte,昨晚我尝试从这个问题中解决一些问题 - Longest word in sentence code not working

这是我的代码:

function LongestWord(sen) {
    var sentence = sen.split(" ");
    console.log(sentence);
    var word = null;
    var longest = 0;
    for(var i=0; i<=sentence.length; i++){
      var words = sentence[i];
      console.log(words);
        if(longest<words.length){
          longest = sentence[i].length;
          word = sentence[i];
        }
    }
  // code goes here
  return word;

}

LongestWord("This is a test sentence!");

当我调用该函数时,我收到此错误 - 我在提交之前使用 jsbin 运行我的代码。

"TypeError: Cannot read property 'length' of undefined
    at LongestWord (mezijosuxu.js:11:24)
    at mezijosuxu.js:21:1
    at https://static.jsbin.com/js/prod/runner-3.35.5.min.js:1:13616
    at https://static.jsbin.com/js/prod/runner-3.35.5.min.js:1:10537"

当我运行 for 循环时,我正在控制台记录句子数组和数组中的单词,但是我是否在 if 语句中定位了错误的东西,或者我是否需要使用正则表达式来去除标点符号和非-alpha 字符以及仅针对每个单词?我还需要另一个 for 循环吗?

【问题讨论】:

  • 替换为:for(var i=0;i
  • 上面写着mezijosuxu.js:11。您需要检查第 11 行。

标签: javascript function


【解决方案1】:
function LongestWord(sen) {
    var sentence = sen.split(" ");
    console.log(sentence);
    var word = null;
    var longest = 0;
    for(var i=0; i<sentence.length; i++){
      var words = sentence[i];
      console.log(words);
        if(longest<words.length){
          longest = sentence[i].length;
          word = sentence[i];
        }
    }
  // code goes here
  return word;

}

LongestWord("This is a test sentence!");

问题发生是因为

i

【讨论】:

    【解决方案2】:

    自定义排序会更容易,只需使用您的句子数组并使用类似于此的代码

    sentence.sort(function(a,b){
         return b.length-a.length;
    });
    

    这将在您将句子转换为数组后立即使用。运行此排序功能后,您可以在sentence[0]找到最大的单词

    排序功能的文档可以在on the Mozilla web documentation找到

    【讨论】:

      【解决方案3】:

      如果数组的长度为 5 并且索引从 0 开始,那么在最后一次迭代中,索引将为 0、1、2、3...4!所以最后一个索引必须小于最后一次迭代的实际数组长度。

      for (var i = 0; i < sentence.length; i++)
      

      还有其他几种编写该函数的方法。一个 Binvention 在他们的回答中提到,那就是在句子数组上使用 sort,但您可以使用 pop 而不是获取索引:

      function LongestWord2(sen) {
        return sen.split(' ').sort(function (a, b) {
          return a.length - b.length;
        }).pop();
      }
      

      另一种可能更笨拙的方法可能是使用数组上reduce 的结果作为数组上的索引来获取最长的单词。

      function LongestWord(sen) {
        var sentence = sen.split(' ');
        return sentence[sentence.reduce(function (p, c, i) {
          return c.length > p ? i : p;
        }, 0)];
      }
      

      DEMO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-14
        • 2013-11-23
        • 1970-01-01
        • 2012-11-09
        • 1970-01-01
        • 2017-09-04
        • 2012-05-06
        相关资源
        最近更新 更多