Три способа найти самое длинное слово в строке в JavaScript

Эта статья основана на сценариях базового алгоритма Free Code Camp « Найдите самое длинное слово в строке ».

В этом алгоритме мы хотим посмотреть на каждое отдельное слово и подсчитать, сколько букв в каждом. Затем сравните счетчики, чтобы определить, в каком слове больше всего символов, и верните длину самого длинного слова.

В этой статье я собираюсь объяснить три подхода. Первый - с циклом FOR, второй - с помощью метода sort (), а третий - с помощью метода reduce ().

Алгоритм Challenge

Верните длину самого длинного слова в предложенном предложении.

Ваш ответ должен быть числом.

Предоставляемые тестовые примеры

  • 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”];

В Юникоде числа идут перед заглавными буквами, а перед строчными.

Нам нужно отсортировать элементы по некоторому критерию упорядочения,

[].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. Найдите самое длинное слово с помощью метода reduce ()

Для этого решения мы будем использовать 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», посвященных проблемам алгоритмов Free Code Camp, где я предлагаю несколько решений и шаг за шагом объясняю, что происходит внутри.

Три способа повторить строку в 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