Javascript最后一封信被切断

Javascript Last Letter getting cut off

本文关键字:最后一封信 Javascript      更新时间:2023-09-26

好了,基本上这段代码将一个句子传递给函数,函数需要找出要返回的最长的单词。一切都很顺利,除了最后一个字母总是被剪掉。那么解决这个问题的好办法是什么呢?

    function LongestWord(sen) { 
sen = sen.toLowerCase();
  var build = "";
  var arr = [];
  var longest = 0;
for(var i = 0; i < sen.length;i++){
  var cur = sen.charCodeAt(i);
  console.log(sen.charCodeAt(i))
  if(i == sen.length - 1){
       arr.push(build);
    }
    if(sen.charAt(i) === " "){
    arr.push(build);
     build = "";
    }
    if(cur >= 97 && cur <= 122){
    build += String.fromCharCode(cur);
    }
  }
  console.log(arr);
  for(var e = 0; e < arr.length - 1;e++){
    if(arr[e].length > arr[e + 1].length){
   longest = arr[e];
    }
    else{
    longest = arr[e + 1];
    }
  }
  return longest; 
}
// keep this function call here 
// to see how to enter arguments in JavaScript scroll down
console.log(LongestWord("Johnny ErsoL"));  

它返回"Johnny",这是正确的,但这是数组最后的样子。

[ 'johnny', 'erso' ]

这是我的建议

function LongestWord(sen) {
    return sen.split(/'b/).filter(function(item) {
        return item.trim().length;
    }).sort(function(a,b) {
        return b.length - a.length;
    });
}

按单词边界拆分句子,然后剪掉空格,最后按每个单词的长度排序并返回排序后的数组。

尝试替换

for(var i = 0; i < sen.length;i++){
  var cur = sen.charCodeAt(i);
  console.log(sen.charCodeAt(i))
  if(i == sen.length - 1){
       arr.push(build);
    }
    if(sen.charAt(i) === " "){
    arr.push(build);
     build = "";
    }
    if(cur >= 97 && cur <= 122){
    build += String.fromCharCode(cur);
    }
  }

arr=sen.split();

e <arr.length -1有一个for循环。我认为你不需要-1

我知道你已经找到了你的答案,但是我只是想告诉你一个你正在做的事情的替代方案。

为了简化你的代码,使它更容易理解,同时也更灵活,确保每个函数只做一件事,或者有一个单一的职责,通常是一个好主意。

在你的代码中,你的LongestWord函数负责识别什么是一个单词,找出哪个是最长的。

你可以做的是创建一个函数,它知道如何将一个句子标记成单词:

function forEachWordsIn(str, callback) {
    var rx = /'b('w+?)'b/g,
        match;
    while (match = rx.exec(str)) callback(match[0]);
}

然后使用longestWord函数中的单词迭代器函数,这使得这个算法现在非常简单:

function longestWord(sen) {
    var longestWord = '';
    forEachWordsIn(sen, function (word) {
        if (word.length > longestWord.length) longestWord = word;
    });
    return longestWord;
}

注意:我将LongestWord重命名为longestWord,因为使函数以大写字母开头是识别构造函数的众所周知的标准