indexOf возвращает -1 для первой буквы слова

Я пытаюсь сделать простую игру с палачом. Я записал в консоль слово, которое нужно угадать (это будет удалено, когда игра будет закончена). Теперь я пытаюсь заставить игрока угадать, есть ли буква в слове, если да, то оно должно раскрыться.

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

Снимок экрана

обратите внимание, что «H» — это первая буква слова: Hond. И как окно оповещения говорит, что это индекс -1.

Это функция, которую я использовал:

function guessLetter(letter){
    var letterVal = letter.value;

    alert(rand.indexOf(letterVal));
}

rand — это переменная, используемая для хранения случайного слова.


person Aurelio Decock    schedule 28.02.2015    source источник
comment
Это означает, что буква не содержится в слове (не то, что индекс -1).   -  person barak manos    schedule 28.02.2015


Ответы (2)


Первая буква слова -1 вместо 0

Нет. Первая буква слова обозначается индексом 0. Если indexOf не находит букву h в строке Hond, это происходит по другой причине: используется сравнение с учетом регистра. Выдача -1 для такого случая — это правильный результат.

Для поиска без учета регистра просто убедитесь, что все буквы имеют одинаковый регистр:

alert(rand.toLowerCase().indexOf(letterVal.toLowerCase()) > -1
   ? "It's there"
   : "It's not there");

Чтобы выявить буквы, которые были угаданы, indexOf в любом случае не кажется правильным инструментом. Лучше использовать что-то вроде

var rand = "Hond";

var guesses = [];
for ( /* every guess */ ) {
    guesses.push(guess.toLowerCase());
    var revealed = "";
    for (var i=0; i<rand.length; i++)
        if (guesses.indexOf(rand[i].toLowerCase() > -1)
            revealed += rand[i];
        else
            revealed += "_";
    }
    show(revealed);
}
person Bergi    schedule 28.02.2015

если ваш поиск чувствителен к регистру, в слове «Hond» нет буквы «h». что показывает нажатие 'o'? он должен показывать 1.

попробуйте преобразовать слово в верхний или нижний регистр, а затем сравните.

person war1oc    schedule 28.02.2015
comment
если я нажму «o», он покажет 1. Проблема действительно в чувствительности к регистру. Благодарю вас! :D - person Aurelio Decock; 28.02.2015