2016-04-24 8 views
2

Я работаю над этим 'Missing letters' вызов на Free Code Camp. на вызов указывает на следующее:Как получить эту функцию «недостающих букв» для работы в 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. Вы должны фактически сравнить значение символа первого индекса со вторым. Кроме того, так как вам нужно сравнить 2 индексов, ваша итерация должна остановиться пойти включительно на

[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 

если я петля на [0, 3], когда я пытаюсь получить доступ к

str[i+1] // index 4 

я получаю индекс из исключения границ, когда я = 3 или если индекс утра из исключения границ, когда я = 0, если я пытаюсь получить доступ к

str[i-1] // index -1 

Вот почему только я итерацию одному от заданной границы

+0

Спасибо! Несколько вопросов. Почему в цикле вы делали 'str.length - 1'? Разве вы не хотите, чтобы цикл проходил по всей длине строки? Не уверен, что я понимаю ваше заявление if; Не могли бы вы объяснить? Я думаю, вы бы хотели сравнить, если последующее значение логически будет следовать предыдущему значению. (Вот почему я придумал эти «предыдущие» и «следующие» переменные). Я знаю, что 'str.charCodeAt (i) + 1! = Str.charCodeAt (i + 1)' различен по синтаксису, но мой мозг видит их как тоже самое. Но спасибо за ответ! Некоторое время работал над этим! –

+0

Внизу моего ответа должно было пояснить это; Извините, если не ясно. Я отредактирую ответ, чтобы лучше объяснить. – thedevelop3r

+0

@ thedevelop3rThanks! –

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; 
} 
Смежные вопросы