Вы можете сделать это, уменьшив массив sentence
.
Преимущество этого подхода состоит в том, что он зацикливается на массиве только один раз:
function longestWords(sentence) {
return sentence.split(' ').reduce((output, word) => {
if (word.length > output.length) {
output.words = [word]
output.length = word.length
} else if (word.length === output.length) {
output.words.push(word)
}
return output
}, { length: 0, words: [] })
}
console.log(longestWords("The quick brown as bbbbbb fox jumped over the lazy dog"));
Или, если вы хотите отфильтровать повторяющиеся слова, вы можете вернуть Set
вместо:
function longestWords(sentence) {
return sentence.split(' ').reduce((output, word) => {
if (word.length > output.length) {
output.words.clear()
output.length = word.length
}
if (word.length >= output.length) {
output.words.add(word)
}
return output
}, { length: 0, words: new Set })
}
const words = longestWords("The quick brown as bbbbbb fox jumped over the jumped lazy dog")
console.log(words.length);
console.log(Array.from(words.words)) //Just to make StackSnippets console show the Set's entries