Три способи знайти найдовше слово в рядку в JavaScript

Ця стаття заснована на сценарії базового алгоритму табору Free Code Camp « Знайди найдовше слово в рядку ».

У цьому алгоритмі ми хочемо розглянути кожне окреме слово і підрахувати, скільки букв у кожному. Потім порівняйте кількість, щоб визначити, яке слово має найбільше символів, і поверніть довжину найдовшого слова.

У цій статті я збираюся пояснити три підходи. Спочатку з циклом FOR, другий за допомогою методу sort () і третій за допомогою методу reduce ().

Виклик алгоритму

Поверніть довжину найдовшого слова у поданому реченні.

Ваша відповідь має бути числом.

Надані тестові кейси

  • findLongestWord ("Швидка коричнева лисиця перестрибнула ледачого собаку") повинна повернути число
  • findLongestWord ("Швидка коричнева лисиця перестрибнула ледачого собаку") має повернути 6
  • findLongestWord ("Нехай сила буде з вами") має повернути 5
  • findLongestWord ("Google робить барель") має повернути 6
  • findLongestWord ("Яка середня швидкість швидкості руху незавантаженої ластівки") має повернути 8
  • findLongestWord ("А якщо ми спробуємо наддовге слово, таке як оториноларингологія")повинен повернутися 19
function findLongestWord(str) { return str.length; } findLongestWord("The quick brown fox jumped over the lazy dog");

1. Знайдіть найдовше слово з петлею FOR

Для цього рішення ми будемо використовувати метод String.prototype.split ()

  • Метод split () розбиває об'єкт String на масив рядків, розділяючи рядок на підрядки.

Нам потрібно буде додати порожній пробіл між дужками методу split () ,

var strSplit = “The quick brown fox jumped over the lazy dog”.split(‘ ‘);

який виведе масив розділених слів:

var strSplit = [“The”, “quick”, “brown”, “fox”, “jumped”, “over”, “the”, “lazy”, “dog”];

Якщо ви не додасте пробіл у дужках, ви отримаєте такий результат:

var strSplit = [“T”, “h”, “e”, “ “, “q”, “u”, “i”, “c”, “k”, “ “, “b”, “r”, “o”, “w”, “n”, “ “, “f”, “o”, “x”, “ “, “j”, “u”, “m”, “p”, “e”, “d”, “ “, “o”, “v”, “e”, “r”, “ “, “t”, “h”, “e”, “ “, “l”, “a”, “z”, “y”, “ “, “d”, “o”, “g”];
function findLongestWord(str) { // Step 1. Split the string into an array of strings var strSplit = str.split(' '); // var strSplit = "The quick brown fox jumped over the lazy dog".split(' '); // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]; // Step 2. Initiate a variable that will hold the length of the longest word var longestWord = 0; // Step 3. Create the FOR loop for(var i = 0; i  longestWord){ // If strSplit[i].length is greater than the word it is compared with... longestWord = strSplit[i].length; // ...then longestWord takes this new value } } /* Here strSplit.length = 9 For each iteration: i = ? i  longestWord)? longestWord = strSplit[i].length 1st iteration: 0 yes 1 if("The".length > 0)? => if(3 > 0)? longestWord = 3 2nd iteration: 1 yes 2 if("quick".length > 3)? => if(5 > 3)? longestWord = 5 3rd iteration: 2 yes 3 if("brown".length > 5)? => if(5 > 5)? longestWord = 5 4th iteration: 3 yes 4 if("fox".length > 5)? => if(3 > 5)? longestWord = 5 5th iteration: 4 yes 5 if("jumped".length > 5)? => if(6 > 5)? longestWord = 6 6th iteration: 5 yes 6 if("over".length > 6)? => if(4 > 6)? longestWord = 6 7th iteration: 6 yes 7 if("the".length > 6)? => if(3 > 6)? longestWord = 6 8th iteration: 7 yes 8 if("lazy".length > 6)? => if(4 > 6)? longestWord = 6 9th iteration: 8 yes 9 if("dog".length > 6)? => if(3 > 6)? longestWord = 6 10th iteration: 9 no End of the FOR Loop*/ //Step 4. Return the longest word return longestWord; // 6 } findLongestWord("The quick brown fox jumped over the lazy dog");

Без коментарів:

function findLongestWord(str) { var strSplit = str.split(' '); var longestWord = 0; for(var i = 0; i  longestWord){ longestWord = strSplit[i].length; } } return longestWord; } findLongestWord("The quick brown fox jumped over the lazy dog");

2. Знайдіть найдовше слово за допомогою методу sort ()

Для цього рішення ми будемо використовувати метод Array.prototype.sort (), щоб відсортувати масив за якимсь критерієм упорядкування, а потім повернути довжину першого елемента цього масиву.

  • Метод sort () сортує елементи масиву на місці і повертає масив.

У нашому випадку, якщо ми просто сортуємо масив

var sortArray = [“The”, “quick”, “brown”, “fox”, “jumped”, “over”, “the”, “lazy”, “dog”].sort();

ми отримаємо такий результат:

var sortArray = [“The”, “brown”, “dog”, “fox”, “jumped”, “lazy”, “over”, “quick”, “the”];

У Unicode цифри стоять перед великими літерами, які стоять перед малими літерами.

Нам потрібно відсортувати елементи за якимсь критерієм упорядкування,

[].sort(function(firstElement, secondElement) { return secondElement.length — firstElement.length; })

де довжина другого елемента порівнюється з довжиною першого елемента масиву.

function findLongestWord(str) { // Step 1. Split the string into an array of strings var strSplit = str.split(' '); // var strSplit = "The quick brown fox jumped over the lazy dog".split(' '); // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]; // Step 2. Sort the elements in the array var longestWord = strSplit.sort(function(a, b) { return b.length - a.length; }); /* Sorting process a b b.length a.length var longestWord "The" "quick" 5 3 ["quick", "The"] "quick" "brown" 5 5 ["quick", "brown", "The"] "brown" "fox" 3 5 ["quick", "brown", "The", "fox"] "fox" "jumped" 6 3 ["jumped", quick", "brown", "The", "fox"] "jumped" "over" 4 6 ["jumped", quick", "brown", "over", "The", "fox"] "over" "the" 3 4 ["jumped", quick", "brown", "over", "The", "fox", "the"] "the" "lazy" 4 3 ["jumped", quick", "brown", "over", "lazy", "The", "fox", "the"] "lazy" "dog" 3 4 ["jumped", quick", "brown", "over", "lazy", "The", "fox", "the", "dog"] */ // Step 3. Return the length of the first element of the array return longestWord[0].length; // var longestWord = ["jumped", "quick", "brown", "over", "lazy", "The", "fox", "the", "dog"]; // longestWord[0]="jumped" => jumped".length => 6 } findLongestWord("The quick brown fox jumped over the lazy dog");

Без коментарів:

function findLongestWord(str) { var longestWord = str.split(' ').sort(function(a, b) { return b.length - a.length; }); return longestWord[0].length; } findLongestWord("The quick brown fox jumped over the lazy dog");

3. Знайдіть найдовше слово за допомогою методу зменшення ()

Для цього рішення ми будемо використовувати Array.prototype.reduce ().

  • Метод reduce () застосовує функцію до накопичувача та кожного значення масиву (зліва направо), щоб зменшити його до одного значення.

reduce () виконує функцію зворотного виклику один раз для кожного елемента, що присутній у масиві.

Ви можете вказати початкове значення як другий аргумент для зменшення, тут ми додамо порожній рядок “”.

[].reduce(function(previousValue, currentValue) {...}, “”);
function findLongestWord(str) { // Step 1. Split the string into an array of strings var strSplit = str.split(' '); // var strSplit = "The quick brown fox jumped over the lazy dog".split(' '); // var strSplit = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]; // Step 2. Use the reduce method var longestWord = strSplit.reduce(function(longest, currentWord) { if(currentWord.length > longest.length) return currentWord; else return longest; }, ""); /* Reduce process currentWord longest currentWord.length longest.length if(currentWord.length > longest.length)? var longestWord "The" "" 3 0 yes "The" "quick" "The" 5 3 yes "quick" "brown" "quick" 5 5 no "quick" "fox" "quick" 3 5 no "quick" "jumped" "quick" 6 5 yes "jumped" "over" "jumped" 4 6 no "jumped" "the" "jumped" 3 6 no "jumped" "lazy" "jumped" 4 6 no "jumped" "dog" "jumped" 3 6 no "jumped" */ // Step 3. Return the length of the longestWord return longestWord.length; // var longestWord = "jumped" // longestWord.length => "jumped".length => 6 } findLongestWord("The quick brown fox jumped over the lazy dog");

Без коментарів:

function findLongestWord(str) { var longestWord = str.split(' ').reduce(function(longest, currentWord) { return currentWord.length > longest.length ? currentWord : longest; }, ""); return longestWord.length; } findLongestWord("The quick brown fox jumped over the lazy dog");

Сподіваюсь, вам це було корисно. Це частина моєї серії “Як вирішити алгоритми FCC” про виклики, пов’язані з алгоритмом табору вільного коду, де я пропоную кілька рішень і покроково пояснюю, що відбувається під капотом.

Три способи повторити рядок у JavaScript

У цій статті я розтлумачу, як вирішити завдання freeCodeCamp "Повторити рядок, повторити рядок". Це передбачає ...

Two ways to confirm the ending of a String in JavaScript

In this article, I’ll explain how to solve freeCodeCamp’s “Confirm the Ending” challenge.

Three Ways to Reverse a String in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Reverse a String”

Three Ways to Factorialize a Number in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Factorialize a Number”

Two Ways to Check for Palindromes in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.

Three Ways to Title Case a Sentence in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Title Case a Sentence”.

Three ways you can find the largest number in an array using JavaScript

In this article, I’m going to explain how to solve Free Code Camp’s “Return Largest Numbers in Arrays” challenge. This…

If you have your own solution or any suggestions, share them below in the comments.

Or you can follow me on Medium, Twitter, Github and LinkedIn, right after you click the green heart below ;-)

‪#‎StayCurious‬, ‪#‎KeepOnHacking‬ & ‪#‎MakeItHappen‬!

Resources

  • split() method — MDN
  • sort() method — MDN
  • reduce() — MDN
  • String.length — MDN
  • for — MDN