簡體   English   中英

Javascript:在字符串中找到最長的單詞

[英]Javascript: find longest word in a string

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',這是最長的單詞......為什么? 我檢查了一些其他類似的問題,但解決方案看起來很像我的代碼。

那是因為你沒有比較數組中的所有項目,你忽略了最后一個。

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++)

對此類問題采用函數式方法的一個優勢是您甚至不必計算

有關更多信息,請參閱MDN Array.reduce (注意: reduce IE8 需要的墊片)

 function longer(champ, contender) { return (contender.length > champ.length) ? contender : champ; } function longestWord(str) { var words = str.split(' '); return words.reduce(longer); } console.log(longestWord("The quick brown fox jumped over the lazy dogs"));

這是您使用 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 ,原來你不會得到數組的最后一個元素

您的情況為-1 ,它甚至從未掃描過它:

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

應該:

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

演示: http : //jsfiddle.net/LfgFk/

索引上升到str.length -1

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

所以最后一個字沒有被處理

嘗試使用: longestWord("Pride AAAAAAAAAAAAAAAAAAAAAAAAA and Prejudice") 你會看到它的工作原理(返回AAAAAAAAAAAAAAAAAAAAAAAAA )。

如果您有疑問,最簡單的修復方法是從for循環中刪除-1

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

檢查兩個版本(有問題的和已修復的)的演示:鏈接在這里

您可以使用Lo-Dash 之類的庫來簡化代碼:

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

ForEach 在 FF 中更快,但在 Chrome 中更慢,但是具有緩存長度和函數應用/調用的 for 循環在 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
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++)

這能解決問題嗎??

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"));
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 man@#$%');
// ==> output: hello

我發現這里的 .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; 
}
function LongestWord(sen) { 

  // code goes here  
  const wordsArray = sen.split('').map(c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c<='9')? c : ' ').join('').split(' ').filter(item => item !== '');
  wordsArray.sort((a, b) => a.length < b.length);
  return wordsArray[0]; 

}

有沒有具體原因

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 - 1; i++)

這樣它就會掃描整個短語

謝謝大家,這是固定代碼:

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;
}

這似乎是最簡單的方法。

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;

}

我會說使用 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
};

我認為這更容易

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;
}

這是解決它的另一種方法。

 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 ba; }); } return result[0]; }

使用 sort() 方法,它通過某種排序標准對數組的元素進行排序,然后返回該數組的第一個元素的長度,從而返回最長的單詞。

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

試試這個

 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;
    }

另一種方法是使用排序:

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

下面的代碼將從字符串中找到最大的單詞及其長度。 代碼是純 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>

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

我將向您推薦這篇很棒的文章,它定義了三種方式:

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 - 使用 reduce() 方法找到最長的單詞

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

當然,如果要獲取字符串,它返回最大單詞的長度,只需去掉返回部分的長度即可。

上面的解決方案是不完整的。 如果有 r 個或更多具有相同長度的單詞怎么辦。 這是一個更好的解決方案:

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;
};

 function sortNumber(a, b) { return a - b; } function findLongestWordLength(str) { var split = str.split(" "); var arr=[]; for(var i=0;i<split.length;i++){ arr.push(split[i].length); } arr.sort(sortNumber); console.log(arr[arr.length-1]); return(arr[arr.length-1]); } findLongestWordLength("What if we try a super-long word such as otorhinolaryngology");

 const longestWord = string => { stringArray = string.split(' ').sort( (a,b) => b.length - a.length) let longestArray= stringArray.filter( word => word.length === stringArray[0].length ) if(longestArray.length === 1){ console.log(longestArray[0]) } else { console.log(longestArray) } } longestWord("Pride and Prejudice")

// My simple solution.

const findLongestWordLength = str => {
    let array = str.split(" ");
    let longest = 0;

    array.map(e => {
        if (e.length > longest) {
            longest = e.length;
        }
    })
    return longest;
}

檢查是否有幫助:

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;
}
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 ')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM