Javascript:在字符串中查找最长的单词

时间:2013-06-30 03:12:31

标签: javascript

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

当我致电longestWord("Pride and Prejudice")时,它会返回'Pride'而不是'偏见',这是最长的单词......为什么?我检查了一些其他类似的问题,但解决方案看起来很像我的代码。

31 个答案:

答案 0 :(得分:17)

那是因为你没有比较数组中的所有项目,你遗漏了最后一项。

for (var i = 0; i < str.length - 1; i++)

应该是

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

for (var i = 0; i <= str.length - 1; i++)

答案 1 :(得分:10)

采用功能性方法解决此类问题的一个好处是,您甚至不必记住计数:

function longer(champ, contender) {
    return (contender.length > champ.length) ? contender : champ;
}

function longestWord(str) {
    var words = str.split(' ');
    return words.reduce(longer);
}

有关详细信息,请参阅MDN Array.reduce。 (注意:reduce需要填充IE8)

答案 2 :(得分:4)

你的情况是-1,它甚至从未扫描过它:

for (var i = 0; i < str.length - 1; i++) {

应该是:

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

演示:http://jsfiddle.net/LfgFk/

答案 3 :(得分:4)

这是您使用forEach的解决方案,这将有助于您避免将来出现错误

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    str.forEach(function(str) {
        if (longest < str.length) {
            longest = str.length;
            word = str;
        }
    });
    return word;
}
console.log(longestWord("pride and prejudice"));

您的原始问题只是str.length - 1本来应该是str.length,原来你不会得到数组的最后一个元素

答案 4 :(得分:3)

索引最高为str.length -1

for (var i = 0; i < str.length - 1; i++) {

所以最后一个字未经处理

尝试使用:longestWord("Pride AAAAAAAAAAAAAAAAAAAAAAAAA and Prejudice")。你会看到它有效(返回AAAAAAAAAAAAAAAAAAAAAAAAA)。

如果您有疑问,最简单的解决方法是从-1循环中删除for

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

检查两个版本(有问题和固定版本)的演示:link here

答案 5 :(得分:1)

您可以使用Lo-Dash这样的库来简化代码:

function longestWord(string) {
    var words = string.split(' ');
    return _.max(words, function(word) { return word.length; });
}

答案 6 :(得分:1)

我发现这里的.map方法有很多帮助(如果你想要单词的字符数,而不是单词本身):

 function findLongestWord(str) {   
   var array = str.split(/\s+/);
   var wordLength = array.map(function(i) {
     return i.length;                       
   });   
   var largest = Math.max.apply(Math, wordLength);   
   return largest; 
}

答案 7 :(得分:1)

function longestWord(sent){
 var arr = sent.match(/[a-z]+/gi);
 arr.sort(function(a, b){
 return b.length - a.length;
});
 return arr[0];
}
longestWord('hello man@#$%');
// ==> output: hello

答案 8 :(得分:1)

这可以解决问题吗?

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

document.write(longestWord("pride and prejudice"));

答案 9 :(得分:1)

ForEach在FF中更快但在Chrome中更慢, 但对于缓存长度和函数的循环,在FF和chrome中,apply / call的速度要快得多。

希望以下代码有所帮助:

function getLongest (arrStr) {
  var longest = 0, word;

  for(var i=0 , len = arrStr.length ; i < len ; i++){

    if(longest < arrStr[i].length) {
      longest =arrStr[i].length;
      word = arrStr[i];
    }

  }

  return word;
}

function isLongest (str) {
  var arrayStr = str.split(' ');
  return function(fn) {
    return fn.apply(this,[arrayStr]);
  }
}

isLongest("hello aaaaaaaaaaaaaaaaaaaaaaaaa bbb")(getLongest); //aaaaaaaaaaaaaaaaaaaaaaaaa

答案 10 :(得分:1)

for (var i = 0; i < str.length - 1; i++)

for (var i = 0; i <= str.length - 1; i++)

OR

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

答案 11 :(得分:0)

// My simple solution.

const findLongestWordLength = str => {
    let array = str.split(" ");
    let longest = 0;

    array.map(e => {
        if (e.length > longest) {
            longest = e.length;
        }
    })
    return longest;
}

答案 12 :(得分:0)

function LongestWord(sen) { 

  // code goes here  
  const wordsArray = sen.split('').map(c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c<='9')? c : ' ').join('').split(' ').filter(item => item !== '');
  wordsArray.sort((a, b) => a.length < b.length);
  return wordsArray[0]; 

}

答案 13 :(得分:0)

解决方案不完整。如果存在2个或更多相同长度的单词怎么办?这是一个更好的解决方案:

longest = str => {
  let words = str.split(" ");
  let size = 0;
  let max = [""];

  for (let i = 0; i < words.length; i++) {
    if (words[i].length > size) {
      size = words[i].length;
    }
    if (max[max.length - 1].length < words[i].length) {
      max = [];
      max.push(words[i]);
    } else {
      max = [...max, words[i]];
    }
  }
  return max;
};

答案 14 :(得分:0)

我将带您参阅this很棒的文章,该文章定义了三种方式:

1-查找带有FOR循环的最长单词

    function findLongestWord(str) {
  var strSplit = str.split(' ');
  var longestWord = 0;
  for(var i = 0; i < strSplit.length; i++){
    if(strSplit[i].length > longestWord){
    longestWord = strSplit[i].length;
     }
  }
  return longestWord;
}
findLongestWord("The quick brown fox jumped over the lazy dog");

2-使用sort()方法查找最长的单词

function findLongestWord(str) {
  var longestWord = str.split(' ').sort(function(a, b) { return b.length - a.length; });
  return longestWord[0].length;
}
findLongestWord("The quick brown fox jumped over the lazy dog");

3-使用reduce()方法找到最长的单词

function findLongestWord(str) {
  var longestWord = str.split(' ').reduce(function(longest, currentWord) {
    return currentWord.length > longest.length ? currentWord : longest;
  }, "");
  return longestWord.length;
}
findLongestWord("The quick brown fox jumped over the lazy dog");

当然,如果您要获取字符串,它会返回最大单词的长度,只需除去返回部分的长度即可。

答案 15 :(得分:0)

    function findLongestWord(str) {
       let stringArray = str.split(" ");
       stringArray.sort(function(a, b){
          return a.split('').length < b.split('').length;
       })
       return stringArray[0];
    }

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

答案 16 :(得分:0)

function sortNumber(a, b) {
return a - b;
}

function findLongestWordLength(str) {
var split = str.split(" ");
var arr=[];
for(var i=0;i<split.length;i++){
  arr.push(split[i].length);
  }
  arr.sort(sortNumber);
  console.log(arr[arr.length-1]);
  return(arr[arr.length-1]);
}

findLongestWordLength("What if we try a super-long word such as otorhinolaryngology");

答案 17 :(得分:0)

下面的代码将从字符串中找到最大的单词及其长度。 代码是纯JavaScript和HTML。

--enable-maintainer-zts
function findLongestWord() {
  var str = document.getElementById('inputText').value;
  calculateLength(str);
}

function calculateLength(str) {
  var substring = str.split(" ");
  var minChar = '';
  for (var i = 0; i <= substring.length - 1; i++) {
    if (substring[i].length >= minChar.length) {
      minChar = substring[i];
    }
  }
  document.getElementById('longChar').innerHTML = 'Longest Word: ' + minChar;
  document.getElementById('longCharLength').innerHTML = 'Longest Word length: ' + minChar.length;
}

答案 18 :(得分:0)

const longestWord = string =>
{
    stringArray = string.split(' ').sort(
        (a,b) => b.length - a.length)
    let longestArray= stringArray.filter( word => word.length === stringArray[0].length ) 
    if(longestArray.length === 1){
        console.log(longestArray[0])
    }
    else
    {
        console.log(longestArray)
    }
}
longestWord("Pride and Prejudice")

答案 19 :(得分:0)

另一种方法是使用sort:

    function longestWord(string) {
        let longest = 0;
        let str = str.split(" ").sort((word1,word2)=>{
        });
        return str[0].length;
   }
   longestWord('I love Python ')

答案 20 :(得分:0)

尝试这个

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

答案 21 :(得分:0)

使用sort()方法,它按一些排序标准对数组的元素进行排序,然后返回该数组的第一个元素的长度,从而返回最长的单词。

function longest(string){
    var longestWord = string.split(' ').sort(function(a,b){
        return b.length - a.length;
    });
    return longestWord[0];
}

答案 22 :(得分:0)

这是另一种解决方法。

function findLongestWord(str) {
  var result = [];
  
  var one = str.split(" ");
    
   for (var i = 0; i < one.length; i++) {
    result[i] = one[i].length;
     result.reverse().sort(function(a,b) {
       return b-a;
     });   
   }
  return result[0];
}

答案 23 :(得分:0)

我认为这更容易

function findLongestWord(str) {
    var longestStr = 0;
    for (var x=0;x<str.split(' ').length;x++){
        if (longestStr < str.split(' ')[x].length){
            longestStr = str.split(' ')[x].length;
        }
    }
    return longestStr;
}

答案 24 :(得分:0)

我想说使用forEach循环是最容易理解的版本

function longestWord(sen) {
  big_word = ""
  words = sen.split(" ")
  words.forEach(function(word){
    if (word.length > big_word.length){
        big_word = word
    };
  });
return big_word
};

答案 25 :(得分:0)

这似乎是最简单的方法。

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;

    str.forEach(function(str) {
        if (longest < str.length) {
            longest = str.length;
            word = str;
        }
    });

return word;

}

答案 26 :(得分:0)

谢谢大家,这是固定代码:

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i < str.length; i++) {
        var checkedLetters = "";
        for (var j = 0; j < str[i].length; j++) {
            if (/[a-zA-Z]/.test(str[i][j])) {
                checkedLetters += str[i][j];
            }
        if (longest < checkedLetters.length) {
            longest = checkedLetters.length;
            word = checkedLetters;
            }
        }
    }
    return word;
}

答案 27 :(得分:0)

您需要使用:

for (var i=0;i<=str.length - 1; i++)

这样会扫描整个短语

答案 28 :(得分:0)

是否有特定原因

for (var i = 0; i < str.length - 1; i++)

不是

for (var i = 0; i < str.length - 1; i++)

这似乎可能是原因。

答案 29 :(得分:-1)

function longestWord(string) {
   var str = string.split(" ");
   var longest = 0;
   var word = null;
   for (var i=0; i < str.length-1; i++) {
      word = longest < str[i].length ? str[i].length : longest;
         word = str[i];
   }
   return word;
   }
   longestWord('I love Python ')

答案 30 :(得分:-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;
}