@Vlad_beg

Как правильно организовать поиск самой короткой строки в массиве?

Нужно найти самую длинную и самую короткую строку в массиве, но данный код находит первое короткое слово а дальше не проверяет. Подскажите, что делаю не так?

var input = document.getElementsByClassName("input")[0].value.split(" ");
 	 var longest = 0, shortest = input[0], longWord, shortWord;
   var output = document.getElementsByClassName("output")[0];
 	
   for(var i = 0; i < input.length; i++) {

   		if (input[i].length < longest ) {
   				longest = input[i].length;
   				longWord = input[i]; 
   		} else if(input[i].length < shortest.length) {
   			shortest = input[i].length;
   			shortWord = input[i]; 
   		} 
   }
  output.innerHTML += "Longest Word is: \"" + longWord + "\".Length is: " + longest + "<br/>";
  output.innerHTML += "Shortest Word is: \"" + shortWord + "\".Length is: " + shortest + "<br/>";
  
  }
  • Вопрос задан
  • 1300 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
При инициализации должно быть так:
shortest = input[0].length
Хотя, я бы вообще так сделал для наглядности:
shortest = Infinity

if (input[i].length < longest )
Неправильный знак, должно быть ">".

else if
Лучше просто отдельный if сделать, на случай, когда в исходном массиве одно слово - оно и самое длинное и самое короткое одновременно.

Ещё, я бы не хранил длину самого короткого и самого длинного слов, только их самих - длину легко получить через word.length, а код упрощается. Даже если здесь и будет какой-то штраф по производительности, им абсолютно точно можно пренебречь.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы