2015-09-07 85 views
0

我想寫一個基本的javascript函數來查找字符串中最長的單詞並記錄它的長度。查找字符串中最長的單詞?

到目前爲止,我有:

function findLongestWord(str) { 
    var words = []; 
    var longest = []; 
    words.push(str.split(" ")); 
    for(var i = 0; i < words.length; i++){ 
    if (words[i].length > longest[0].length){ 
     longest.push(words[i]); 
    } 
    } 
    return longest[0].length; 
} 

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

這讓我感覺良好,但它給我一個錯誤。我嘗試了console.logging的每一步,並在for循環周圍失敗。

+3

當「最長」爲空時,'longest [0] .length'失敗。另外,'unshift'可能是你想要的,而不是'push',因爲你正在檢查'longest [0]'' – Jan

+1

'words.push(str.split(「」))的長度;'沒有按照你的想法它是... – epascarello

回答

3

當您使用words.push(str.split(" "))中,陣列words看起來像

[ 
    ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"] 
] 

另一個問題是當您在for中檢查longest[0].length的第一次迭代時,它是undefined。錯誤

Uncaught TypeError: Cannot read property 'length' of undefined

爲了解決這個問題,這導致,可以使用longeststring,而不是array。並在for中,將大於當前longest字符串的字符串分配給該字符串length

在函數結束時,您可以返回longest字符串。

問題/建議:

  1. 使用str.split(' ')直接分配到words可變
  2. 使用longeststring變量,而不是arrayinitialize它空字符串,即'',以避免上述錯誤
  3. longest的長度與words數組中的字符串進行比較
  4. 如果words數組中的字符串長度大於longest,請更新longest
  5. 使用\s+用空格

function findLongestWord(str) { 
 
    var words = str.split(/\s+/); 
 
    var longest = ''; 
 

 
    for (var i = 0; i < words.length; i++) { 
 
    if (words[i].length > longest.length) { 
 
     longest = words[i]; 
 
    } 
 
    } 
 
    return longest; 
 
} 
 

 
var longestWord = findLongestWord('The quick brown fox jumped over the lazy dog'); 
 

 
document.write('Longest Word: "' + longestWord + '"'); 
 
document.write('<br />Longest Word Length: ' + longestWord.length);

0
if (words[i].length > longest[0].length) 

你會在上面的錯誤。這是第一次,它是空的。

0

你的陳述

words.push(str.split(" ")); 

應該

words=str.split(" ") 

而且@Tushar解決您的 「問題」 也休息... ;-)

1

您可以大大簡化到split字符串此使用Array.prototype.sortArray.prototype.shift。例如

var str = 'The quick brown fox jumped over the lazy dog', 
 
    longest = str.split(' ').sort(function(a, b) { 
 
        return b.length - a.length; 
 
       }).shift(); 
 

 
document.getElementById('word').innerHTML = longest; 
 
document.getElementById('length').innerHTML = longest.length;
<p id="word"></p> 
 
<p id="length"></p>


sort()將產生通過它們的長度來分類(最長至最短)字符串數組和shift()抓住第一個元素。您還可以使用return a.length - b.lengthpop()而不是shift()來抓取最後一個元素,以其他方式排序(最短到最長)。

1

嘗試

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

這裏是另外一個較短的版本:使用JavaScript Array.prototype.sort()

function findTheLongestWord(str) { 
 
    var temp = ''; 
 
    (str || "").split(/\s+/).forEach(function(word) { 
 
    temp = word.length > temp.length && word || temp; 
 
    }); 
 
    return "longest word is: " + temp + " and it's length is: " + temp.length; 
 
} 
 

 
alert (findTheLongestWord("The quick brown fox jumped over the lazy dog, once again!"));

1
function findLongestWord(str) { 
    var arr=str.split(" "); 
    var sarr=arr.sort(function(a,b){return b.length-a.length;}); 
    str=sarr[0]; 
    return str.length; 
} 

我們可以優雅地解決售後服務這個問題不使用循環

相關問題