2017-05-03 105 views
0

我對JavaScript仍然陌生,所以請耐心等待......我有一系列的句子......每個單詞需要分割成一個數組,每個單詞的長度轉換爲數值,比較值的句子中的其他詞的數值來確定人物的拉爾數量,應返回數比較JavaScript中動態表中字符串的長度值

到目前爲止,我有:

function findLongestWord(str) { 
 
\t var a = str.split(" "); //array for each word in str 
 
\t var b = a.length - 1; //number of cells in array a 
 
\t var c = 0; //counter for number of itterations 
 
\t var d = []; //array to hold the numberic length of each word per cell 
 
\t var e ; //compares cells and returns highest numberic value 
 
    var f = []; //just in case it is needed 
 
    for (a ; c < b ; c++) { //while c is less than b run code and add 1 to c 
 
\t \t d[c].push(a[c].length) ; //should push the value of the length of a[c] into d[] 
 
\t } 
 
    for (c = 0 ; d[c] < d.length ; c++) { 
 
    e = [d[c]].Math.max();//should return the larges value in d[] 
 
    } 
 
    return e; 
 
} 
 
findLongestWord("The quick brown fox jumped over the lazy dog");

例如,在上面的句子中,最長的單詞是'jumped',並且應該返回6的值......我一直在努力研究這個小時並試圖找到正確的代碼......在某一時刻,代碼返回了' 1','3'或'19',其中'19'通過了其中一個句子,但沒有通過其他語句...現在,我要麼獲得空白輸出或var.push()未定義....

+0

可能的重複:http://stackoverflow.com/questions/17386774/javascript-find-longest-word-in-a-string – jrook

回答

0
function findLongestWord(str) { 
    var words = str.split(" "), 
     word_lengths = []; 

    for (var i=0; i < words.length - 1; i++) { 
    word_lengths[i] = words[i].length; 
    } 

    return Math.max.apply(null, word_lengths); 
} 


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

將str分解爲單詞,然後使用Math max查找最長。

function getLongest(str) 
    var maxSize = 0; 
    str.replace(/\w+/g, word => maxSize = Math.max(word.length, maxSize)); 
    return maxSize; 
} 
0

當你運行你的代碼,因爲d是一個空數組你得到d[c] is undefined",...錯誤。因此d[0]未定義,您不能在undefined上調用push()。您的代碼可以使用一些更正。

function findLongestWord(str) { 
 
\t var a = str.split(" "); //array for each word in str 
 
\t var b = a.length; //number of cells in array a 
 
\t var d = []; //array to hold the numberic length of each word per cell 
 
    
 
    while(c < b) { 
 
    d.push(a[c].length) ; //should push the value of the length of a[c] into d[] 
 
    c++; 
 
    } \t \t 
 
    return Math.max(...d); 
 
} 
 

 
var longest = findLongestWord("The quick brown fox jumped over the lazy dog"); 
 
console.log(longest);

  • 我也取代了第一個for循環帶,而構建體。
  • b不需要等於a.length-1。它應該等於a.length,因爲這是你想要迭代的數組長度。
  • 對於第二個循環(查找數組中的最大值),可以使用spread operator。但是如果你想用一個循環做到這一點,你應該做的線沿線的東西:

    var max=d[0]; 
    for(var i=1; i<d.length; i++) 
        if(d[i]>max) max=d[i]; 
    

在一般情況下,您可以定義裏面的for循環的循環變量,你不需要宣佈它。另外,我不認爲創建變量以防萬一是好的做法。