2015-12-18 86 views
-1

我最長字coderbyte昨晚的工作我試着從這個問題的幾件事情打轉轉 - Longest word in sentence code not working我似乎無法獲得此功能工作的權利

,這裏是我的代碼:

function LongestWord(sen) { 
    var sentence = sen.split(" "); 
    console.log(sentence); 
    var word = null; 
    var longest = 0; 
    for(var i=0; i<=sentence.length; i++){ 
     var words = sentence[i]; 
     console.log(words); 
     if(longest<words.length){ 
      longest = sentence[i].length; 
      word = sentence[i]; 
     } 
    } 
    // code goes here 
    return word; 

} 

LongestWord("This is a test sentence!"); 

當我調用該函數,我得到這個錯誤 - 我使用jsbin運行我的代碼之前,我提交它。

"TypeError: Cannot read property 'length' of undefined 
    at LongestWord (mezijosuxu.js:11:24) 
    at mezijosuxu.js:21:1 
    at https://static.jsbin.com/js/prod/runner-3.35.5.min.js:1:13616 
    at https://static.jsbin.com/js/prod/runner-3.35.5.min.js:1:10537" 

我console.logging從數組的數組句子和單詞,當我運行的循環,但我在我的if語句指定了錯誤的東西,或者我需要使用正則表達式來剝離標點符號和非字母符號以及每個單詞的目標?我是否還需要另一個for循環?

+3

替換爲: for(var i = 0; i SebastianGreen

+0

它說'mezijosuxu.js:11'。你需要檢查第11行。 – Pang

回答

0

自定義排序會更容易只是把你的句子數組,並使用類似的代碼來此

sentence.sort(function(a,b){ 
    return b.length-a.length; 
}); 

這將用於您的句子轉換成數組之後。這種功能運行後,你最大的字可以在sentence[0]

可以發現on the Mozilla web documentation

0

如果數組的長度爲5,指數從0開始,就非常的排序函數的文檔中找到最後一次迭代索引將是0,1,2,3 ... 4!所以最後的索引必須小於最終迭代中的實際數組長度。

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

還有其他幾種寫作方法。一個Binvention在他們的回答談到,那就是來了句陣列上使用sort,但不是抓住了指數就可以使用pop代替:

function LongestWord2(sen) { 
    return sen.split(' ').sort(function (a, b) { 
    return a.length - b.length; 
    }).pop(); 
} 

另一個也許更笨拙的方法可能使用reduce上的結果該數組作爲數組的索引來獲取最長的單詞。

function LongestWord(sen) { 
    var sentence = sen.split(' '); 
    return sentence[sentence.reduce(function (p, c, i) { 
    return c.length > p ? i : p; 
    }, 0)]; 
} 

DEMO

0
function LongestWord(sen) { 
    var sentence = sen.split(" "); 
    console.log(sentence); 
    var word = null; 
    var longest = 0; 
    for(var i=0; i<sentence.length; i++){ 
     var words = sentence[i]; 
     console.log(words); 
     if(longest<words.length){ 
      longest = sentence[i].length; 
      word = sentence[i]; 
     } 
    } 
    // code goes here 
    return word; 

} 

LongestWord("This is a test sentence!"); 

問題的發生是因爲的<與<符號=取代因爲陣列從0

開始我< = sentence.length