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

Скрипт не правильно работает при наличии большого текста.

Помогите исправить ошибку. Текст примера:

  • Не следует, однако, забывать о том, что рамки и место обучения кадров способствует повышению актуальности дальнейших направлений развитая системы массового участия. Повседневная практика показывает, что сложившаяся структура организации обеспечивает актуальность всесторонне сбалансированных нововведений! С другой стороны постоянное информационно-техническое обеспечение нашей деятельности требует от нас системного анализа соответствующих условий активизации.

введите сюда описание изображения введите сюда описание изображения

function LongestWord() {
  var str = document.getElementById("txt").value;
  var buf1 = "";
  var buf2 = "";
  var max = -1;
  for (var i = 0; i < str.length; i++) {
    if (((str[i] >= "a") && (str[i] <= "z")) || ((str[i] >= "A") && (str[i] <= "Z")) || ((str[i] >= "а") && (str[i] <= "я")) || ((str[i] >= "А") && (str[i] <= "Я"))) {
      buf1 = buf1 + str[i];
    } else {
      if (buf1.length > max) {
        buf2 = buf1;
        max = buf1.length;
        buf1 = "";
      }
    }
  }
  if (buf1.length > max) {
    buf2 = buf1;
    max = buf1.length;
    buf1 = "";
  }
  alert(buf2);
}

function ShortestWord() {
  var str = document.getElementById("txt").value;
  var buf1 = "";
  var buf2 = "";
  var min = 10000;
  for (var i = 0; i < str.length; i++) {
    if (((str[i] >= "a") && (str[i] <= "z")) || ((str[i] >= "A") && (str[i] <= "Z")) || ((str[i] >= "а") && (str[i] <= "я")) || ((str[i] >= "А") && (str[i] <= "Я"))) {
      buf1 = buf1 + str[i];
    } else {
      if (buf1.length < min) {
        buf2 = buf1;
        min = buf1.length;
        buf1 = "";
      }
    }
  }
  if (buf1.length < min) {
    buf2 = buf1;
    max = buf1.length;
    buf1 = "";
  }
  alert(buf2);
}
<p><input id="txt" type="text" size="100"></p>

<p><input type="submit" value="Самое длинное слов" onclick="LongestWord();"></p>
<p><input type="submit" value="Самое короткое слов" onclick="ShortestWord();"></p>

<p></p>


Ответы (1 шт):

Автор решения: Zhihar

А такой вариант решения устраивает?

text = "Не следует, однако, забывать о том, что рамки и место обучения кадров способствует повышению актуальности дальнейших направлений развитая системы массового участия. Повседневная практика показывает, что сложившаяся структура организации обеспечивает актуальность всесторонне сбалансированных нововведений! С другой стороны постоянное информационно-техническое обеспечение нашей деятельности требует от нас системного анализа соответствующих условий активизации.";

// разбить текст на слова предварительно заменив знаки препинания пробелами (для корректного разбития)
text = text.replace(/[,.!:]/g, " ")
words = text.split(" ")

// оставить только слова ненулевого размера
words = words.filter(word => word.length > 0)

// отсортировать список слов по увеличению размера слов
words = words.sort((word1, word2) => word1.length - word2.length)

// выбрать самое короткое слово (первое в списке) и самое длинное слово (последнее в списке)
console.log(words[0], words[0].length);
console.log(words[words.length - 1], words[words.length - 1].length);

P.S.

знаков препинания можно добавить, я просто взял самые частые

→ Ссылка