Javascript 查找字符串中长度最大的所有单词

Javascript 查找字符串中长度最大的所有单词,javascript,ecmascript-6,Javascript,Ecmascript 6,我想从字符串中找出所有长度最大的单词 目前,结果只是长度最大的第一个:'jumped1',而我想要它们全部:['jumped1','jumped2'] 我如何适应以下情况 function test(str) { var newStr = str.split(' '); var nu = 0; var word =null; for(var i=0; i < newStr.length; i++){ if(newStr[i].length > nu){

我想从字符串中找出所有长度最大的单词

目前,结果只是长度最大的第一个:
'jumped1'
,而我想要它们全部:
['jumped1','jumped2']

我如何适应以下情况

function test(str) {

  var newStr = str.split(' ');
  var nu = 0;
  var word =null;

  for(var i=0; i < newStr.length; i++){
     if(newStr[i].length > nu){
       nu = newStr[i].length; // length
       word = newStr[i]; // word

     }    
  }
  return word;
}

console.log(test("The quick brown fox jumped1 over the lazy dog - jumped2"));
功能测试(str){
var newStr=str.split(“”);
var-nu=0;
var-word=null;
对于(变量i=0;inu){
nu=newStr[i].length;//length
word=newStr[i];//word
}    
}
返回词;
}
log(test(“敏捷的棕色狐狸跳过了懒惰的狗-跳过了2”);

当您找到最长单词时,将其推送到最长单词数组中,而不是指定给变量
word
。但是,当找到新的最长单词时,您必须处理对数组的消隐

功能测试(str){
var split_string=str.split(“”);
var最长_长度=0;
var-words=[];
for(拆分字符串的let字符串){
if(string.length>最长长度){
单词=[字符串];
最长长度=string.length;
}else if(string.length==最长长度){
推(弦);
}
}
返回单词;
}
log(test(“敏捷的棕色狐狸跳过了懒惰的狗-跳过了2”)您可以使用获取最长单词的长度,然后获取该长度的单词列表:

功能测试(str){
变量词=str.split(“”);
var maxLen=words.reduce(函数(num,word){
返回Math.max(num,word.length);
}, 0);
返回单词。过滤器(函数(单词){
返回word.length==maxLen
});
}

log(test(“敏捷的棕色狐狸跳过了懒惰的狗-跳过了2”)
如果我正确理解了问题,您可以在找到最大长度后使用
过滤器
,以便返回每个单词的数组,其
长度===max

功能测试(str){
让单词=str.split(“”)
设max=0
words.forEach(word=>{
如果(word.length>max)max=word.length
})
返回words.filter(word=>word.length==max)
}
console.log(
测试(“敏捷的棕色狐狸跳过了懒惰的狗-跳过了2”)

)
您可以通过收集更长的单词或相同长度的单词来减少数组

功能测试(字符串){
返回字符串
.拆分(“”)
.减少((r,w)=>{
如果(!r | | r[0]。长度log(test(“敏捷的棕色狐狸跳过了懒惰的狗-跳过了2”)你说的“多个词”是什么意思?你是指结尾有数字的单词,还是希望所有单词都有一个最大长度的数组?@Joe我想如果有多个相同长度的单词nop,jumped1和jumped2,那么它们的意思就不止一个了。目前它只显示jumped1,因为这两个单词的长度都相同(7),所以如果数组中最长的单词是长度7,返回长度为7的所有单词?是。这是
O(2n)
,但是
O(n)
是可能的。@JoeIddon虽然我明白你的意思,但你不会考虑2,请看@NickA是的,它们的执行时间都与输入大小成线性关系,只是我的速度总是两倍:)。你的仍然是一个很酷的功能性方法,所以我的+1@理论上的乔伊登;)就我所知,
reduce
filter
的执行速度比迭代快(虽然我可能错了!),你的O(n)也是如此。这是
O(2n)
,但是
O(n)
是可能的。谢谢@JoeIddon,我没有意识到如何一次积累-你的答案是优雅的100%天才!,不comments@ShanuTThankachan如果答案解决了您的问题,请