Найти все слова в строке, которые имеют наибольшую длину - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу найти все слова из строки, которые имеют наибольшую длину.

На данный момент результат только первый с наибольшей длиной: '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 голосов
/ 01 сентября 2018

Вы можете уменьшить массив, собирая более длинные слова или с одинаковой длиной.

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"));
0 голосов
/ 01 сентября 2018

Вы можете использовать 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"));
0 голосов
/ 01 сентября 2018

Если я правильно понял вопрос, вы можете использовать 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")
)
0 голосов
/ 01 сентября 2018

Вместо присвоения переменной 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...