【问题标题】:Find out the longest word from a sentence - Javascript从句子中找出最长的单词 - Javascript
【发布时间】:2012-08-31 13:51:23
【问题描述】:

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

我理解逻辑,但是代码... sigh

这就是我们所做的 -

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

  2. 获取它们的长度。

  3. 找出最大的长度。
  4. 返回长度最大的单词。

希望我说清楚......

【问题讨论】:

  • 代码??你必须尝试一下。
  • @hvgotcodes 不,只是我在Coderbyte上发现的一个挑战
  • @Namanyayg 哈哈,不应该是“找别人来挑战”;)
  • @RyanMcDonough 我在找不到解决方案后来到这里。我通常会搜索很多并自己找出解决方案,但在这里,我什至不知道从哪里开始。

标签: javascript html


【解决方案1】:

拆分字符串,遍历部分并跟踪最长的部分。

类似这样的:

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 的正则表达式):

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

Working jsfiddle

【讨论】:

  • 我需要代码,我很确定我理解了逻辑。我是个菜鸟,我什至不知道如何拆分字符串。
  • @Namanyayg 你确定“菜鸟”吗?您的个人网站显示“我设计了令人惊叹的网站和主题!” :-)
  • 设计,而不是开发。大不同。
  • @Jeroen:你应该提到正则表达式的起源吧?
  • @hvgotcodes:好的,错过了那个版本,抱歉。 @Jeroen:不要在数组上使用for ... in,它可能会产生不可预知的结果。见stackoverflow.com/questions/500504/…
【解决方案2】:
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就是这个数组中最长的单词。

【讨论】:

  • 比我的解决方案更漂亮:)
  • 你能告诉我从这里去哪里吗?我需要根据空格和非字母字符的数量拆分一个句子,然后从中找出最长的单词..
【解决方案3】:

试试这个:

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

【讨论】:

  • 最后的[0]是什么意思?
  • [0] 之前,代码按长度对单词数组进行排序。 [0] 选择第一个元素(记住,编号从 0 开始,而不是 1)。
  • 如果你的句子有两个长度相同但最长的单词,使用 [0] 或 [1] 你可以选择特定的单词
【解决方案4】:

您可以使用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

【讨论】:

    【解决方案5】:

    这就是我尝试解决问题的方法:

    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; 
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-26
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2017-03-30
      相关资源
      最近更新 更多