找出句子中最长的单词——Javascript

Find out the longest word from a sentence - Javascript

本文关键字:单词 Javascript 句子      更新时间:2023-09-26

有办法找出Javascript中最长的单词吗?它也应该忽略标点符号!

我理解其中的逻辑,但代码叹息

以下是我们所做的-

  1. 计算在一起的字母数字字符的数量,不以空格或任何符号分隔。

  2. 获取它们的长度。

  3. 找出所有长度中最大的
  4. 返回长度最大的单词

希望我能说清楚。。。

拆分字符串,在各个部分上循环,并跟踪最长的部分。

类似这样的东西:

var parts = sentence.split();
var longestIndex = -1;
var longestWord = 0;
for(var i=0; i < parts.length; i++){
    if(parts[i].length > longestWord){
        longestWord = parts[i].length;
        longestIndex = i;
    }
}
alert("longest word is " + parts[longestIndex] + ": " + longestWord + " characters");

如果需要拆分非字母字符和空格,则需要使用正则表达式。您可以更改此行:

var parts = sentence.split();

为此(感谢Kooilnc的regex):

var parts = sentence.match(/'w[a-z]{0,}/gi);

工作jsfiddle

var longest_word = arr.reduce(function (x, y) { return x.length > y.length ? x : y; });

给你。

使用它:

var arr = [ 'lol', 'loll', 'lollll', 'lo', 'l' ];
var longest_word = arr.reduce(function (x, y) { return x.length > y.length ? x : y; });

所以,把你的句子变成一个数组,那么变量longest_word将是该数组中最长的单词。

试试这个:

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

您可以使用match方法将字符串拆分为仅包含单词的数组(没有分隔符、数字等),并按每个元素的长度降序排序,之后元素0是最长的单词。

它可能是String.prototype扩展

String.prototype.longestWord = function(){
  return (this.match(/'w[a-z]{0,}/gi) || [''])
          .sort(function(a,b){return b.length-a.length;})[0];
}
//usage
'We saw it ...! A lazy cat walking - or did we?'.longestWord(); //=> walking
'------------'.longestWord();                                   //=> ''
'---aa--b----'.longestWord();                                   //=> 'aa'

与函数相同,使用Array.reduce

function longestWord(str){
   return (str.match(/'w[a-z]{0,}/gi) || [''])
           .reduce( function(a,b){return a.length>b.length ? a : b;} );
}

Fiddle here

这就是我试图解决问题的方式:

function LongestWord(sen) { 
    var wordArray = sen.match(/'w+/gi);
    var longest = 0; 
    var word = undefined; 
  for(var i = 0; i < wordArray.length; i++){
    if(wordArray[i].length > longest){
       word = wordArray[i];
      longest = word.length;
    }
  }
  return word; 
}