Функция поиска самого длинного слова в строке. JavaScript

274
25 июля 2018, 09:50

Задача.

  1. Правильно ли записана функция findLongestWord(str), которая получает аргументом произвольную строку и возвращает самое длинное слово в этой строке?

  2. Как реализовать проверку условия - в строке могут быть только пробелы и символы букв и цифр?

'use strict'; 
 
const findLongestWord = function(str) { 
  let arrStr = str.split(' '); 
  let wordLength = 0; 
  let longestWord; 
 
  for (let i = 0; i < arrStr.length; i += 1) { 
    wordLength = arrStr[1].length; 
 
    if (arrStr[i].length > wordLength) { 
      longestWord = arrStr[i]; 
 
      return longestWord; 
    } 
 
  } 
}; 
 
// Вызовы функции для проверки 
console.log( 
  findLongestWord("The quick brown fox jumped over the lazy dog") 
); // вернет 'jumped' 
 
console.log( 
  findLongestWord("Google do a roll") 
); // вернет 'Google' 
 
console.log( 
  findLongestWord("May the force be with you") 
); // вернет 'force'

Answer 1

'use strict'; 
 
const findLongestWord = function(str) { 
  if (!/^[a-zA-Z0-9\s]*$/.test(str)) { 
    return 'содержит посторонние символы!'; 
  } 
  let arrStr = str.split(' '); 
  let longestWord = arrStr[0]; 
  for (let i = 1; i < arrStr.length; i++) { 
    if (arrStr[i].length > longestWord.length) { 
      longestWord = arrStr[i]; 
    } 
  } 
  return longestWord; 
}; 
 
// Вызовы функции для проверки 
console.log( 
  findLongestWord("The quick brown fox jumped over the lazy dog") 
); // вернет 'jumped' 
 
console.log( 
  findLongestWord("Google do a  gooooogle roll") 
); // вернет 'Google' 
 
console.log( 
  findLongestWord("May the force be with! you") 
); // вернет 'force'

Answer 2

Решение

Используй reduce для поиска самого длинного слова:

function findLongestWord(str) { 
  return str.split(' ').reduce((a, b) => (b.length > a.length) ? b : a); 
}; 
 
console.log(findLongestWord('There is the longest word in a string!'));

Если под проверкой на пунктуацию вы имели в виду "удаление" этих символов , то можно использовать replace:

function findLongestWord(str) { 
  var punctRE = /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/g; 
  return str.replace(punctRE, '').split(' ').reduce((a, b) => (b.length > a.length) ? b : a); 
}; 
 
 
console.log(findLongestWord('This, -/ is #! an $ % ^ & * ex32ample ;: {} of a = -_432 string dsa35!with `~)() punctuation'));

Answer 3

Термин "слово" употребляешь в контексте регулярных выражений? В регулярках "слово" - это непрерывная последовательность букв, цифр и знака нижнее подчеркивание _

function findLongestWord (input) { 
  return input 
    .split(/\W+/) 
    .reduce( 
      function (longest, word) { 
        return word.length > longest.length 
          ? word 
          : longest; 
      },  
      '' 
    ); 
} 
 
console.log(findLongestWord('aaa bbbbbbbb !ccc!!!!!!!!!!!!!!')); // bbbbbbbb 
console.log(findLongestWord('aaa bb_b')); // bb_b

READ ALSO
Запись из поля timestamp в date

Запись из поля timestamp в date

Есть два поля в mysql один типа timestamp другой dateКак перенести (обновить) правильно из поля timestamp в поле date

169
Выбор покупателя исходя из условия

Выбор покупателя исходя из условия

Есть такая задача выбрать покупателей, у которых возраст от 10 до 50 лет? Для решения задачи написал такой скрипт

153
MySQL и функция из своей длл

MySQL и функция из своей длл

Есть своя, самописная, функция хэширования пароля (не суть важно что конкретно делает сама функция, больше интересен теоретический аспект...

156