我可以'似乎无法使此功能正常工作

I can't seem to get this function to work right

本文关键字:常工作 功能 工作 我可以      更新时间:2023-09-26

我正在研究最长的单词coderbyte,昨晚我试着玩这个问题中的一些东西-句子中最长的词代码不起作用

这是我的代码:

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循环吗?

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

由于<=而发生问题替换为<自数组从0 开始的符号

i<句子长度

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

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

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

排序函数的文档可以在Mozilla web文档

中找到

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

演示