Я должен найти самое длинное слово в строке, это код, который я придумал до сих пор. К сожалению, это, кажется, не работает, и мой вопрос почему?

function findLongestWordLength(str) { 
  str.split("");
  let longest = 1;
  for(let i = 0; i < str.length; i++){
    if (str[i].length > longest){
       longest = str[i].length;
    }
  }
  return longest;
}
1
Peter Utekal 3 Май 2019 в 07:05

7 ответов

Лучший ответ

Если я правильно понял, есть две основные проблемы:

1) Вы не сохраняете результат String.split () где угодно.

2) Если вам нужно разделить отдельные слова, вам нужно разделить на space

Я также начну с longest = 0 вместо 1

Примере:

function findLongestWordLength(str)
{ 
    str = str.split(" ");
    let longest = 0;

    for (let i = 0; i < str.length; i++)
    {
        if (str[i].length > longest)
            longest = str[i].length;
    }

    return longest;
}

console.log(findLongestWordLength("Hello World"));
console.log(findLongestWordLength(""));
console.log(findLongestWordLength("123 1234567 12345"));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Кроме того, вы можете использовать Array.map () чтобы map каждое слово его длины, а затем spread этот массив длин на Math.max (), чтобы получить желаемый результат:

function findLongestWordLength(str)
{
    let wordLengths = str.split(" ").map(word => word.length);
    return Math.max(...wordLengths);
}

console.log(findLongestWordLength("Hello World"));
console.log(findLongestWordLength(""));
console.log(findLongestWordLength("123 1234567 12345"));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
3
Shidersz 3 Май 2019 в 04:22
function findLongestWordLength(str) { 
  var otherStr = str.split(" ");
  let longest = 0;
  for(let i = 1; i < otherStr.length; i++){
    if (otherStr[i].length > otherStr[longest].length){
       longest = i;
    }
  }
  return otherStr[longest];
}

findLongestWordLength("This is the String Data")
0
Mayank Gupta 3 Май 2019 в 04:10

Проблема в том, что вторую строку нужно изменить на str = str.split(" ");, потому что строки неизменяемы и не могут быть изменены, их нужно переназначить.

function findLongestWordLength(str) { 
  str = str.split(" ");
  let longest = 1;
  console.log(str);
  for(let i = 0; i < str.length; i++){
    if (str[i].length > longest){
       longest = str[i].length;
    }
  }
  return longest;
}

var result = findLongestWordLength("Joan Ala Valeron")
console.log(result);
1
Hien Nguyen 3 Май 2019 в 04:10

Это не будет работать, потому что вы проходите через каждый символ в строке, длина которой равна 1. Вы не сравниваете длину слов.

function findLongestWordLength(str) {
    let words = str.split(" ");  // Delemiter to separate words from sentence is space
    let longest = 1;
    for(let i = 0; i < words.length; i++){
    if (words[i].length > longest){
       longest = words[i].length;
    }
  }
  return longest;
}
0
Supratim Samantray 3 Май 2019 в 04:15

Вы можете попробовать этот код.

function findLongestWordLength(str) {
  var strSplit = str.split(' ');
  var longest = 0;
  for(var i = 0; i < strSplit.length; i++){
    if(strSplit[i].length > longest){
    longest = strSplit[i].length;
     }
  }
  return longest;
}
findLongestWordLength("The quick brown fox jumped over the lazy dog");
0
Tanmay Patel 3 Май 2019 в 04:10
function spacer(m)
{
  var space = "";
  for(var inst = 0; inst < m;inst++)
    space += "\n";
  console.log(space);
}

function findLongestWordLength(str) {

  //Checking that what you are sending is a string...
  if(typeof str !== "string")
    throw "This function requires you to pass in a string...";

  //Ghetto Class...lol
  function CreateWord(word)
  {
      this.word = word;
      this.length = word.length;
  }

  // Getting all the words...but taking out the words that are ""
  var AllWords = str.split(" ").filter(word => word != ""),

    // This is how many words you have that are not ""
    wordCount = AllWords.length,

    // Defaulting the longest word to the first word...
    longest = new CreateWord(AllWords[0]);

    // if we only have one, we return the one word...
    if(wordCount === 1)
        return longest;

  for(let i = 0; i < wordCount; i++){
    if (AllWords[i].length > longest.length){
       longest = new CreateWord(AllWords[i]);
    }
  }
  return longest;
}

//Simple Test...
var Implementation = findLongestWordLength("ONE TWO THREE FOUR  TESTINGLONGWORD");
console.log(Implementation);
console.log(`Word: ${Implementation.word}`);
console.log(`Length: ${Implementation.length}`);

spacer(3);

//Single word...
var Implementation2 = findLongestWordLength("Only-One-Word");
console.log(Implementation2);
console.log(`Word: ${Implementation2.word}`);
console.log(`Length: ${Implementation2.length}`);

spacer(3);

//Exception...because I dont want want you to misUse this function....
var Implementation3 = findLongestWordLength(null);
console.log(Implementation3);
console.log(`Word: ${Implementation3.word}`);
console.log(`Length: ${Implementation3.length}`);
0
UncleFifi 3 Май 2019 в 04:45

Вам нужно разделить строку на " ". Затем перебирайте слова и возвращайте наибольшую длину.

function findLongestWordLength(str) {
  const words = str.split(" ");
  return words.reduce(
    (max, word) => (word.length > max ? word.length : max),
    0
  );
}

console.log(findLongestWordLength("hello world"));

Это решение короче и чище благодаря использованию reduce.

1
teimurjan 3 Май 2019 в 04:11