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

时间:2018-09-01 17:41:33

标签: 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){
       nu = newStr[i].length; // length
       word = newStr[i]; // word

     }    
  }
  return word;
}

console.log(test("The quick brown fox jumped1 over the lazy dog - jumped2"));

4 个答案:

答案 0 :(得分:3)

找到最长的单词时,不要将其分配给变量word,而是将其推送到最长的单词数组中。找到新的最长单词时,您必须处理数组的空白。

function test(str) {
  var split_string = str.split(' ');
  var longest_length = 0;
  var words = [];
  for(let string of split_string){
     if(string.length > longest_length){
       words = [string];
       longest_length = string.length;
     } else if (string.length == longest_length){
       words.push(string);
     }
  }
  return words;
}

console.log(test("The quick brown fox jumped1 over the lazy dog - jumped2"));

答案 1 :(得分:2)

您可以使用reduce获取最长单词的长度,然后使用filter获取该长度的单词列表:

function test(str) {
  var words = str.split(' ');
  var maxLen = words.reduce(function(num, word){
    return Math.max(num, word.length);
  }, 0);
  
  return words.filter(function(word){
    return word.length == maxLen
  });
}

console.log(test("The quick brown fox jumped1 over the lazy dog - jumped2"));

答案 2 :(得分:0)

如果我对问题的理解正确,则可以在找到最大长度后使用filter,以便返回包含length === max的每个单词的数组

function test (str) {
  let words = str.split(' ')
  let max = 0
  words.forEach(word => {
    if (word.length > max) max = word.length
  })
  return words.filter(word => word.length === max)
}

console.log(
test("The quick brown fox jumped1 over the lazy dog - jumped2")
)

答案 3 :(得分:0)

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

function test(string) {
    return string
        .split(' ')
        .reduce((r, w) => {
            if (!r || r[0].length < w.length) {
                return [w];
            }
            if (r[0].length === w.length) {
                r.push(w);
            }
            return r;
        }, undefined);
}

console.log(test("The quick brown fox jumped1 over the lazy dog - jumped2"));