2016-08-08 6 views
0

При выполнении предупреждения индекс первого элемента, т.е. фиолетовый, отображается -1. Но это неожиданно для получения правильного результата. Если я не могу получить ожидаемый результат, кто-нибудь мне поможет что я могу пойти дальше в кодировании. Фактически m new для javascript, поэтому я столкнулся с такой проблемой. Надеюсь, вы ответите, как только сможете.indexOf(), отображающее неожиданное значение

var colors = ["voilet", "indigo", "blue", "green", "yellow", "orange", "red"]; 
 
var target; 
 
var target_index; 
 
var guess_input; 
 
var finished = false; 
 

 
function do_game() { 
 
    var random_number = Math.random() * 7; 
 
    var random_number_integer = Math.floor(random_number); 
 
    var target_index = random_number_integer; 
 
    target = colors[target_index]; 
 
    alert(target); 
 
    while (!finished) { 
 

 
    var guess_input = prompt("I am thinking of a color " + 
 
     "violet,indigo,blue,green,yellow,orange,red" + 
 
     "What is the color?"); 
 
    alert(colors.indexOf(guess_input)); 
 
    finished = check_guess(); 
 
    } 
 
} 
 

 
function check_guess() { 
 

 
    if (colors.indexof(guess_input) < 0) { 
 
    alert('not present'); 
 
    return false; 
 
    } 
 
    if (guess_input > target) { 
 
    alert('you gave large'); 
 
    return false; 
 
    } 
 
    if (guess_input < target) { 
 
    alert('you gave small'); 
 
    return false; 
 
    } 
 
    return true; 
 
}

+2

'indexOf' возвращает' -1', когда элемент не был найден в массиве. У вас есть опечатка в вашем массиве 'colors' (voilet вместо фиалки) – AbM

+0

FYI: Вопрос не должен быть закрыт для простой типографской ошибки, так как это не проблема. Топ проголосовавший ответ на исправление опечатки НЕ исправит код. – epascarello

+0

Опечатка FIXED код .. это была ошибка – Weedoze

ответ

5

Вы сказали, что ваш guess_input является violet и возвращает -1

Это нормальное поведение, потому что violet нет в массиве

["voilet","indigo","blue","green","yellow","orange","red"]; 

Там является опечаткой ROR: Вы писали voilet вместо violet

0

guess_input определяется с var внутри функции do_game поэтому не является глобальным.

Вам нужно будет удалить var, чтобы он мог быть доступен другим способом или передать его другому методу.

/* fixed spelling here */ 
 
var colors = ["violet", "indigo", "blue", "green", "yellow", "orange", "red"]; 
 
var target; 
 
var target_index; 
 
var guess_input; 
 
var finished = false; 
 

 
function do_game() { 
 
    var random_number = Math.random() * 7; 
 
    var random_number_integer = Math.floor(random_number); 
 
    var target_index = random_number_integer; 
 
    target = colors[target_index]; 
 
    alert(target); 
 
    while (!finished) { 
 
    /* removed var here */ 
 
    guess_input = prompt("I am thinking of a color " + 
 
     "violet,indigo,blue,green,yellow,orange,red" + 
 
     "What is the color?"); 
 
    alert(colors.indexOf(guess_input)); 
 
    finished = check_guess(); 
 
    } 
 
} 
 

 
function check_guess() { 
 

 
    /* fixed typo here */ 
 
    if (colors.indexOf(guess_input) < 0) { 
 
    alert('not present'); 
 
    return false; 
 
    } 
 
    if (guess_input > target) { 
 
    alert('you gave large'); 
 
    return false; 
 
    } 
 
    if (guess_input < target) { 
 
    alert('you gave small'); 
 
    return false; 
 
    } 
 
    return true; 
 
} 
 

 
do_game()

+0

Неправильно, 'guess_input' является' var''d вне функций. –

+0

@NiettheDarkAbsol WRONG 'var guess_input = prompt' спасибо за неправильное downvote. – epascarello

+0

Да, переопределенная переменная. Справедливо. –

0

Проверьте правописание фиалки в массиве.

и

if (colors.indexof(guess_input) < 0) { 
    alert('not present'); 
    return false; 
    } 

У вас есть опечатка здесь. Это должно быть:

colors.indexOf(guess_input) 
Смежные вопросы