2017-02-28 25 views
1

我對JS非常陌生, 如何確保用戶輸入是有效的字符串? 如果字符串位於數組內部,則遊戲應該繼續。 如果字符串在數組之外,遊戲應該要求用戶再次輸入他們的猜測。如何確保用戶輸入是js中的有效字符串

var color = ["AliceBlue","Black","FireBrick","GreenYellow","LightBlue","Ivory","MediumBlue","Indigo","SpringGreen","Moccasin"]; 

var target; 
var guess_input_text; 
var guess_input; 
var finished = false; 
var guesses = 0; 
var rightAnswer; 
var i = 0; 

function do_game() { 
    var random_number = Math.random()* color.length; 
    var random_number_interger = Math.floor(random_number); 
    target = random_number_interger + 1; 
    rightAnswer = color[target]; 


    while(!finished) { 
     guess_input_text = prompt("I am thinking of one of these colors:\n\n" + color.sort()+ "\n\n The right answer is\n" + rightAnswer); 
     guess_input = guess_input_text; 
     guesses +=1; 
     finished = check_guess(); 

    } 
} 


function check_guess() { 



    if(guess_input < rightAnswer){ 

      console.log("Hint: your color is alphabetically lower than mine") 
      return false; 
     } 
     else if(guess_input > rightAnswer) { 

     console.log("Hint: your color is alphabetically higher than mine ") 
      return false; 
     } 
    else (guess_input == rightAnswer) 
     { 
      console.log("Congrats!!!") 
      return true; 

     } 

    ) 
} 
+1

改爲使用select元素(下拉元素),因此您不必擔心大小寫,間距和拼寫錯誤。 – Archer

回答

1

您可以使用indexOf來檢查顏色數組中的guess_input的位置。如果它不存在,它將返回-1。

所以:

function check_guess() { 
    if (color.indexOf(guess_input) < 0) { 
     console.log("Not a valid colour, try again."); 
     return false; 
    } 
    return true; 
} 
+0

但是,這個問題是你可能會輸入一個錯誤的字符串與字符串的第一個字母。 indexOf不會檢查字符串是否完全等於數組中的一個字符串 –

+0

是的,請參閱https://www.w3schools.com/jsref/jsref_indexof_array.asp – ded

+0

謝謝你們!我想到了。非常感謝。 –

0

您可以使用Array.prototype.find與ES6箭頭功能的功能,使其更迅捷。

if(color.findIndex(e => e === guess_input) === -1){ 
    alert("Please guess again!); 
} 

上面的代碼提醒用戶再次猜測如果guess_input不陣列中找到。

相關問題