找到字符串中最长的单词?

时间:2015-09-07 03:05:49

标签: javascript function for-loop return

我正在尝试编写一个基本的javascript函数来查找字符串中最长的单词并记录它的长度。

到目前为止,我有:

function findLongestWord(str) {
  var words = [];
  var longest = [];
  words.push(str.split(" "));
  for(var i = 0; i < words.length; i++){
    if (words[i].length > longest[0].length){
      longest.push(words[i]);
    }
  }
  return longest[0].length;
}

findLongestWord('The quick brown fox jumped over the lazy dog');

这对我来说很有意义,但却给了我一个错误。我尝试了console.logging每一步,它在for循环中失败。

8 个答案:

答案 0 :(得分:3)

使用words.push(str.split(" "))时,数组words看起来像

[
    ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
]

另一个问题是当您在longest[0].length中检查for第一次迭代时,它是undefined。这会导致错误

  

未捕获的TypeError:无法读取属性&#39;长度&#39;未定义的

要解决此问题,您可以将longest用作string而不是array。在for中,将length大于当前longest字符串的字符串指定给它。

在函数结束时,您可以返回longest字符串。

<强>问题/建议:

  1. 使用str.split(' ')直接分配到words变量
  2. 使用longest作为string变量而不是arrayinitialize用于清空字符串,即'',以避免上述错误
  3. longest的长度与words数组
  4. 中的字符串进行比较
  5. 如果words数组中字符串的长度大于longest,请更新longest
  6. 使用\s+ split字符串空格
  7. &#13;
    &#13;
    function findLongestWord(str) {
      var words = str.split(/\s+/);
      var longest = '';
    
      for (var i = 0; i < words.length; i++) {
        if (words[i].length > longest.length) {
          longest = words[i];
        }
      }
      return longest;
    }
    
    var longestWord = findLongestWord('The quick brown fox jumped over the lazy dog');
    
    document.write('Longest Word: "' + longestWord + '"');
    document.write('<br />Longest Word Length: ' + longestWord.length);
    &#13;
    &#13;
    &#13;

答案 1 :(得分:1)

您可以使用Array.prototype.sortArray.prototype.shift大大简化此操作。例如

SPA
Single Page Application

var str = 'The quick brown fox jumped over the lazy dog', longest = str.split(' ').sort(function(a, b) { return b.length - a.length; }).shift(); document.getElementById('word').innerHTML = longest; document.getElementById('length').innerHTML = longest.length;将生成按其长度排序的字符串数组(最长到最短),<p id="word"></p> <p id="length"></p>抓取第一个元素。您还可以使用sort()shift()代替return a.length - b.length以另一种方式(最短到最长)进行排序,以获取最后一个元素。

答案 2 :(得分:1)

尝试

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i < str.length; i++) {
        if (longest < str[i].length) {
            longest = str[i].length;
            word = str[i];
        }
    }
    return word;
}

答案 3 :(得分:1)

function findLongestWord(str) {
  var arr=str.split(" ");
  var sarr=arr.sort(function(a,b){return b.length-a.length;});
  str=sarr[0];
  return str.length;
}

使用javascript Array.prototype.sort()我们可以优雅地解决这个问题,而无需使用循环

答案 4 :(得分:0)

  if (words[i].length > longest[0].length)

您将在上面收到错误。与第一次一样,它是空的。

答案 5 :(得分:0)

您的陈述

words.push(str.split(" "));

应该是

words=str.split(" ")

@Tushar解决了你的其他问题&#34;太......; - )

答案 6 :(得分:0)

这是另一个较短的版本:

&#13;
&#13;
function findTheLongestWord(str) {
  var temp = '';
  (str || "").split(/\s+/).forEach(function(word) {
    temp = word.length > temp.length && word || temp;
  });
  return "longest word is: " + temp + " and it's length is: " + temp.length;
}

alert (findTheLongestWord("The quick brown fox jumped over the lazy dog, once again!"));
&#13;
&#13;
&#13;

答案 7 :(得分:-1)

要在Java中找到最长的关键字字符串,您需要编写一个程序。

square = [[0, 0, 0],
          [0, 0, 0],
          [0, 0, 0]]

entered = [];

for r in range(3):
    for c in range(3):
        v = int(input("Enter a number 1-9 (can't enter the same number again): "))
        if v > 9 or v < 1 or v in entered:
          print("bad number")
        entered.append(v)
        square[r][c]=v