2016-04-24 28 views
2

我正在上Free Code Camp.挑戰這個'Missing letters'挑戰如下指示:如何獲得這個'缺少字母'功能在javaScript中工作?

查找傳遞信件範圍缺失的字母,並返回。

如果所有字母出現在範圍內,則返回undefined。

function fearNotLetter(str) { 
    var newstr; 
    for(var j = 0; j < str.length; j++){ 

     var previous = str.charCodeAt(j); 
     var next = str.charCodeAt(j) + 1; 


     if(next === false){ 
      newstr = String.fromCharCode(next); 
     } else { 
      return undefined; 
     } 
    } 

    return newstr; 
} 

以爲我把它釘開始,

var previous = str.charCodeAt(j); 
    var next = str.charCodeAt(j) + 1; 

簡單,如果next是不正確的,例如next的值不是後面的字符或者比以前多一個,返回newstr = String.fromCharCode(next);

在此先感謝!

回答

2

試試這個:

function fearNotLetter(str) { 
    for(var i = 0; i < str.length - 1; i++) 
    { 
    if(str.charCodeAt(i) + 1 != str.charCodeAt(i+1)) 
     return String.fromCharCode(str.charCodeAt(i) + 1); 
    } 
    return undefined; 
} 

一般設置並返回不必要的變數是不是好的做法。你在if語句中沒有測試任何條件。您需要實際比較第一個索引與第二個索引的字符的值。此外,因爲你需要比較兩個指標,你的迭代必須停止在去包容性的

[0, length - 2] with a + 1 for the secondary index 

[1, length - 1] with a - 1 for the secondary index 

的注要去長度 - 1:

考慮字符字符串 「ABCD」:

a, b, c, d 
0, 1, 2, 3 

如果在i循環[0,3]當我嘗試訪問

str[i+1] // index 4 

我會得到一個索引越界異常當i = 3 或者這就是爲什麼只有我,如果上午索引越界異常的i = 0時,如果我嘗試訪問

str[i-1] // index -1 

遍歷到一個遠離給定的邊界

+0

謝謝!幾個問題。 爲什麼在循環的條件下你做'str.length - 1'?你不想讓循環遍歷整個字符串嗎? 不知道我理解你的陳述;你能解釋一下嗎?我想你會想要比較一下,如果隨後的值在邏輯上跟隨先前的值。 (這就是爲什麼我想出了那些'previous'和'next'變量)我知道'str.charCodeAt(i)+ 1!= str.charCodeAt(i + 1)'是不同的語法,但我的大腦認爲它們是一樣。但非常感謝您的回覆!一直在這個工作一段時間! –

+0

我的答案底部的註釋應該解釋這一點;如果不清楚,我很抱歉。我會編輯答案以更好地解釋。 – thedevelop3r

+0

@ thedevelop3r謝謝! –

0

我覺得這個解決方案是很容易解釋:

function fearNotLetter(str) { 
    var missingLetter; 
    for (var i = 0; i < str.length; i++) { 
    if (str.charCodeAt(i) - str.charCodeAt(i-1) > 1) { 
     missingLetter = String.fromCharCode(str.charCodeAt(i) - 1); 
    } 
    } 
    return missingLetter; 
}