从一个句子中找出最长的单词 - Javascript

3
有没有办法在Javascript中找出最长的单词?还应该忽略标点符号!
我理解逻辑,但是代码... 唉。
我们要做的是 -
1. 计算在一起的字母数字字符的数量,不要用空格或任何符号分开。 2. 获取它们的长度。 3. 找到所有单词中最大的长度。 4. 返回具有最大长度的单词。
希望我表达清楚了...

1
代码?你一定尝试过什么。 - Amandeep Jiddewar
@hvgotcodes 不是,只是我在Coderbyte上找到的一个挑战。 - Namanyay Goel
@Namanyayg 哈哈,这不应该是“找别人来完成挑战”;) - Ryan McDonough
@RyanMcDonough 我在找不到解决方案后来到这里。通常我会搜索很多并自己找出解决方案,但是在这里,我甚至不知道从哪里开始。 - Namanyay Goel
5个回答

9

将字符串分割,循环每个部分并跟踪最长的部分。

像这样:

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 你确定那个"noob"词吗?你的个人网站上写着 "我设计了令人惊叹的网站和主题!" :-) - Amandeep Jiddewar
1
“设计”,不是“开发”。两者有很大的区别。 - Ashley Strout
JS不是设计“惊人的网站和主题”的必需品 :P 我可以做一些客户端JS(我不经常使用它,只用于编辑JQ插件),并考虑刷新一下JS编程。 - Namanyay Goel
1
@Jeroen:你可以提到正则表达式的来源,对吧? - KooiInc
1
@hvgotcodes:好的,我错过了那个版本,抱歉。@Jeroen:不要在数组上使用for ... in,它可能会产生不可预测的结果。请参见https://dev59.com/ZXRB5IYBdhLWcg3wz6ed - KooiInc
显示剩余11条评论

8
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将是该数组中最长的单词。


1
比我的解决方案更好看 :) - Asciiom
你能告诉我接下来该怎么做吗?我需要根据空格和非字母字符的数量来分割一个句子,然后找出其中最长的单词。 - Namanyay Goel

4

试试这个:

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

在末尾的 [0] 是什么意思? - Namanyay Goel
[0]之前,代码正在按长度对单词数组进行排序。[0]选择第一个元素(请记住,编号从0开始,而不是1)。 - Ashley Strout
如果你的句子有两个长度相同且最长的单词,你可以使用[0]或[1]来选择特定的单词。 - Shreedhar

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


0
这是我尝试解决问题的方式:
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; 

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接