我似乎无法使这个功能正常工作

时间:2015-12-18 07:30:26

标签: javascript function

我正在处理最长的单词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语句中定位错误的东西,还是我需要使用正则表达式去除标点符号和非字母字符以及每个单词的目标?我是否还需要另一个for循环?

3 个答案:

答案 0 :(得分:0)

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

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

将句子转换为数组后立即使用。运行此排序功能后,您可以在sentence[0]

找到最大的单词

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

答案 1 :(得分:0)

如果数组的长度为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

答案 2 :(得分:0)

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

因为&lt; = replace with&lt;而发生了问题数组从0开始的符号

  

I&LT = sentence.length