Javascript: найти длинное слово в строке

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i < str.length - 1; i++) {
        if (longest < str[i].length) {
            longest = str[i].length;
            word = str[i];
        }
    }
    return word;
}

Когда я вызываю longestWord("Pride and Prejudice"), он возвращает "Pride", а не "Prejudice", которое является самым длинным словом... почему? Я проверил некоторые другие подобные вопросы, но решения сильно походили на мой код.

Ответ 1

Это потому, что вы не сравниваете все элементы в массиве, вы не указываете последний.

for (var i = 0; i < str.length - 1; i++)

должен быть

for (var i = 0; i < str.length; i++)

или

for (var i = 0; i <= str.length - 1; i++)

Ответ 2

Одним из преимуществ функционального подхода к таким проблемам является то, что вам даже не нужно вести учет:

function longer(champ, contender) {
    return (contender.length > champ.length) ? contender : champ;
}

function longestWord(str) {
    var words = str.split(' ');
    return words.reduce(longer);
}

См. MDN Array.reduce для получения дополнительной информации. (примечание: reduce потребности шим для IE8)

Ответ 3

У вас есть -1 в вашем состоянии, он даже не сканирует его:

for (var i = 0; i < str.length - 1; i++) {

Должно быть:

for (var i = 0; i < str.length; i++) {

Демо: http://jsfiddle.net/LfgFk/

Ответ 4

Вот это ваше решение с forEach, это поможет вам избежать ошибки в будущем

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    str.forEach(function(str) {
        if (longest < str.length) {
            longest = str.length;
            word = str;
        }
    });
    return word;
}
console.log(longestWord("pride and prejudice"));

Ваша первоначальная проблема заключалась в том, что только str.length - 1 должен был быть только str.length, изначально вы бы не попали в последний элемент массива

Ответ 5

Индекс увеличивается до str.length -1:

for (var i = 0; i < str.length - 1; i++) {

Таким образом, последнее слово не обрабатывается.

Попробуйте: longestWord("Pride AAAAAAAAAAAAAAAAAAAAAAAAA and Prejudice"). Вы увидите, что он работает (возвращает AAAAAAAAAAAAAAAAAAAAAAAAA).

Если у вас есть сомнения, самый простой способ исправить это - удалить -1 из цикла for.

for (var i = 0; i < str.length; i++) {

Проверьте демоверсию обеих версий (проблемных и фиксированных): ссылка здесь.

Ответ 6

for (var i = 0; i < str.length - 1; i++)

к

for (var i = 0; i <= str.length - 1; i++)

ИЛИ

for (var i = 0; i < str.length; i++)

Ответ 7

Вы можете упростить свой код с помощью библиотеки, например Lo-Dash:

function longestWord(string) {
    var words = string.split(' ');
    return _.max(words, function(word) { return word.length; });
}

Ответ 8

ForEach быстрее работает в FF, но медленнее в Chrome, но для цикла с кешированной длиной и функцией apply/call выполняется быстрее как в FF, так и в chrome.

Надеемся, что приведенный ниже код поможет:

function getLongest (arrStr) {
  var longest = 0, word;

  for(var i=0 , len = arrStr.length ; i < len ; i++){

    if(longest < arrStr[i].length) {
      longest =arrStr[i].length;
      word = arrStr[i];
    }

  }

  return word;
}

function isLongest (str) {
  var arrayStr = str.split(' ');
  return function(fn) {
    return fn.apply(this,[arrayStr]);
  }
}

isLongest("hello aaaaaaaaaaaaaaaaaaaaaaaaa bbb")(getLongest); //aaaaaaaaaaaaaaaaaaaaaaaaa

Ответ 9

это решает проблему?

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i <= str.length - 1; i++) {
        if (longest < str[i].length) {
            longest = str[i].length;
            word = str[i];
        }
    }
    return word;
}

document.write(longestWord("pride and prejudice"));

Ответ 10

function longestWord(sentence){
 var arr = sentence.match(/[a-z]+/gi);
 arr.sort(function(a, b){
 return b.length - a.length;
});
 return arr[0];
}
longestWord('hello [email protected]#$%');
// ==> output: hello

Ответ 11

Я нахожу, что метод .map здесь очень помогает (это если вы хотите, чтобы число символов слова, а не само слово):

 function findLongestWord(str) {   
   var array = str.split(/\s+/);
   var wordLength = array.map(function(i) {
     return i.length;                       
   });   
   var largest = Math.max.apply(Math, wordLength);   
   return largest; 
}

Ответ 12

Есть ли конкретная причина

for (var i = 0; i < str.length - 1; i++)

не

for (var i = 0; i < str.length - 1; i++)

Похоже, это может быть причиной.

Ответ 13

Вам нужно использовать:

for (var i=0;i<=str.length - 1; i++)

Таким образом, он будет сканировать всю фразу

Ответ 14

Спасибо всем, это фиксированный код:

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i < str.length; i++) {
        var checkedLetters = "";
        for (var j = 0; j < str[i].length; j++) {
            if (/[a-zA-Z]/.test(str[i][j])) {
                checkedLetters += str[i][j];
            }
        if (longest < checkedLetters.length) {
            longest = checkedLetters.length;
            word = checkedLetters;
            }
        }
    }
    return word;
}

Ответ 15

Это самый простой способ сделать это.

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;

    str.forEach(function(str) {
        if (longest < str.length) {
            longest = str.length;
            word = str;
        }
    });

return word;

}

Ответ 16

Я бы сказал, что использование цикла forEach является наиболее понятной версией

function longestWord(sen) {
  big_word = ""
  words = sen.split(" ")
  words.forEach(function(word){
    if (word.length > big_word.length){
        big_word = word
    };
  });
return big_word
};

Ответ 17

Я думаю, что это проще

function findLongestWord(str) {
    var longestStr = 0;
    for (var x=0;x<str.split(' ').length;x++){
        if (longestStr < str.split(' ')[x].length){
            longestStr = str.split(' ')[x].length;
        }
    }
    return longestStr;
}

Ответ 18

Вот еще один способ его решения.

function findLongestWord(str) {
  var result = [];
  
  var one = str.split(" ");
    
   for (var i = 0; i < one.length; i++) {
    result[i] = one[i].length;
     result.reverse().sort(function(a,b) {
       return b-a;
     });   
   }
  return result[0];
}

Ответ 19

Используя метод sort(), он сортирует элементы массива по некоторому критерию упорядочения и затем возвращает длину первого элемента этого массива и, следовательно, самое длинное слово.

function longest(string){
    var longestWord = string.split(' ').sort(function(a,b){
        return b.length - a.length;
    });
    return longestWord[0];
}

Ответ 20

ПОПРОБУЙТЕ ЭТО

 function longest(string) {
        var str = string.split(" ");
        var longest = 0;
        var word = null;
        for (var i = 0; i <= str.length - 1; i++) {
            if (longest < str[i].length) {
                longest = str[i].length;
                word = str[i];
            }
        }
        return word;
    }

Ответ 21

Другой способ - использовать sort:

    function longestWord(string) {
        let longest = 0;
        let str = str.split(" ").sort((word1,word2)=>{
        });
        return str[0].length;
   }
   longestWord('I love Python ')

Ответ 22

Код ниже найдет самое большое слово и его длину из строки. Код имеет простой JavaScript и html.

function findLongestWord() {
  var str = document.getElementById('inputText').value;
  calculateLength(str);
}

function calculateLength(str) {
  var substring = str.split(" ");
  var minChar = '';
  for (var i = 0; i <= substring.length - 1; i++) {
    if (substring[i].length >= minChar.length) {
      minChar = substring[i];
    }
  }
  document.getElementById('longChar').innerHTML = 'Longest Word: ' + minChar;
  document.getElementById('longCharLength').innerHTML = 'Longest Word length: ' + minChar.length;
}
<!doctype html>
<html lang="en">

<head>
</head>

<body>
  <input type="text" id="inputText"> <br/>
  <button onclick=findLongestWord()>Click to find longest              word</button> <br/>
  <div id="longChar"></div> <br/>
  <div id="longCharLength"></div>
</body>
<script src="longestWord.js"></script>

</html>

Ответ 23

    function findLongestWord(str) {
       let stringArray = str.split(" ");
       stringArray.sort(function(a, b){
          return a.split('').length < b.split('').length;
       })
       return stringArray[0];
    }

    findLongestWord("The quick brown fox jumped over the lazy dog");

Ответ 24

Я отсылаю вас к этой удивительной статье, которая определяет три способа:

1 - Найдите самое длинное слово с циклом FOR

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

2 - Найдите самое длинное слово с помощью метода sort()

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

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");

Конечно, он возвращает длину самого большого слова, если вы хотите получить строку, просто избавьтесь от длины в возвращаемой части.

Ответ 25

Один из вариантов реализации:

const findLongestWord = (str) => {
  let word = ' ';
  str.split(' ').forEach(item => word.length < item.length ? word = item : null);
  return word;
}
findLongestWord("The quick brown fox jumped over the lazy dog") // return 'jumped'
findLongestWord("Google do a roll") // return 'Google'
findLongestWord("May the force be with you") // return 'force'

Ответ 26

решения неполные. Что делать, если есть 2 или более слов, которые имеют одинаковую длину. вот лучшее решение:

longest = str => {
  let words = str.split(" ");
  let size = 0;
  let max = [""];

  for (let i = 0; i < words.length; i++) {
    if (words[i].length > size) {
      size = words[i].length;
    }
    if (max[max.length - 1].length < words[i].length) {
      max = [];
      max.push(words[i]);
    } else {
      max = [...max, words[i]];
    }
  }
  return max;
};

Ответ 27

Проверьте, помогает ли это:

function longestWord(string){
  var str = string.split(" ");
  var longest = 0;
  var word = null;
  for(var i=0; i < str.length; i++){
    if(longest < str[i].length){
      longest=str[i].length;
      word=str[i];
    }
  }
  return word;
}

Ответ 28

function longestWord(string) {
   var str = string.split(" ");
   var longest = 0;
   var word = null;
   for (var i=0; i < str.length-1; i++) {
      word = longest < str[i].length ? str[i].length : longest;
         word = str[i];
   }
   return word;
   }
   longestWord('I love Python ')