Eu sei como posso encontrar a palavra mais longa em uma string. Por exemplo, este código aqui. Mas aqui o problema é que a palavra "bbbbbb" é encontrada porque ele é a PRIMEIRA PALAVRA MAIS LONGA DA string, depois disso, com 6 caracteres, também temos a palavra "saltou". Minha pergunta é como posso encontrar neste caso e a palavra "saltou", então todos eles não são apenas o primeiro.
UPDATE: quero uma lista exclusiva, portanto, apenas uma de cada palavras
function longestWord(sentence) {
sentence = sentence.split(' ');
let theWord = sentence[0];
var longest = 0;
for (let i = 0; i < sentence.length; i++) {
if (sentence[i] != "") {
if (sentence[i].length > theWord.length) {
longest = sentence[i].length;
theWord = sentence[i];
}
}
}
return {
length: longest,
actuallWord: theWord
}
}
console.log(longestWord("The quick brown as bbbbbb fox jumped over the bbbbbb lazy dog"));
javascript
arrays
string
Trajce12
fonte
fonte
sentence.filter(w => w.length === longest)
obter uma matriz de palavras com esse comprimento.Respostas:
fonte
Você pode adotar uma abordagem de loop único e verificar a extensão de cada palavra com o comprimento dos acumuladores do primeiro item.
fonte
Você pode fazer isso com
Array.prototype.reduce()
uma única passagem pela matriz (sem loop extra para calcular o comprimento máximo).A idéia é redefinir a matriz resultante com uma única palavra, uma vez que seu comprimento exceda os que foram inseridos antes ou acrescentados se a palavra atual tiver o mesmo tamanho ou simplesmente passar de outra forma:
fonte
length
ewords
).Você pode fazer isso reduzindo a
sentence
matriz.A vantagem dessa abordagem é que ela faz um loop na matriz apenas uma vez:
Ou, se você quiser filtrar palavras duplicadas, retorne um
Set
:fonte
O que você pode fazer é verificar se o comprimento da palavra é maior ou igual ao comprimento do primeiro item da matriz (Todos os itens da matriz devem ter o mesmo comprimento).
Nesse caso, verifique se é maior. Se isso for verdade, defina a matriz com essa palavra, porque você encontrou uma palavra que era maior que as palavras da matriz. Caso contrário, adicione-o à matriz de palavras que têm o maior tamanho.
fonte
Também pode ser feito em uma única redução.
Iniciado com o objeto.
fonte
Essa abordagem não tem uma complexidade de tempo melhor do que as melhores respostas aqui, mas possui melhores coeficientes. (Ele apenas percorre a matriz de palavras uma vez, nenhuma função é chamada, exceto
Array.prototype.push
).fonte