簡體   English   中英

檢查數組 javascript 中所有元素的相同條件

[英]checking the same condition for all elements in array javascript

我正在嘗試編寫一個基本的劊子手游戲。 當用戶正確猜出單詞時,該單詞被上傳到“答案”數組並顯示給用戶,當猜出單詞錯誤時,警告應該說“再試一次”並清除輸入值。

問題是即使一個詞實際上猜對了,還有其他所有詞都沒有猜對,所以我最終得到了同樣的警告“再試一次”

所以我想我需要循環原始單詞並檢查是否沒有任何元素等於字母猜測,為此我正在使用every() 但我無法使其工作並且“再試一次”總是顯示...

請幫忙


        function generate(){
            pickedWord = words[Math.floor(Math.random() * words.length)];   
            console.log(pickedWord)
            for(let i = 0; i<pickedWord.length; i++){           
                word[i] = "_";
            } 
            wordGuess.textContent = word.join(" ");
        }

        function getInput(e){
            e.preventDefault();
            let guess = input.value.toLowerCase();  
            if(guess.length > 1){
                alert("type just one letter")
                input.value = ""        
            }

            else{   

                for(let i=0; i < pickedWord.length; i++){
                     if(guess === pickedWord[i]){
                        word[i] = guess;
                        wordGuess.textContent = word.join(" ");
                        input.value="";                                      
                    }

                     else { 
                        const letter = [pickedWord[i]]
                        console.log(letter)
                        const itemGuessed = letter.every(el => el !== guess)

                            if(itemGuessed){

                            alerta.textContent = "try again"
                            input.value="";
                        }
                    }   

                 }

            }

        }
```

您實際上沒有指定words數組的外觀,所以我假設它是一個字符串數組。 就像是

const words = ['applejuice', 'bananashake', 'peanutbutter'];


所以首先,我實際上不明白const letter = [pickedWord[i]]的目的是什么。 假設選擇的單詞是'apple' ,而i是 0,那么letter將等於['a'] ,這使得const itemGuessed = letter.every(el => el !== guess)行完全沒有意義。

我還認為最好檢查guess是否包含在循環之外的pickedWord中,使用pickedWord.every(el => el !== guess)pickedWord.includes(guess) (雖然我更喜歡后者。)。

無論如何,我對您的代碼進行了一些重寫:

 let pickedWord; const words = ['applejuice', 'bananashake', 'peanutbutter']; let word = []; function generate() { pickedWord = words[Math.floor(Math.random() * words.length)]; word = Array(pickedWord.length).fill('_'); console.log(pickedWord, word.join('')); } let guessedLetters = []; function getInput(input){ // e.preventDefault(); const guess = input.toLowerCase().replace(/\s/g, ''); if(guess.length;== 1){ alert("type one letter"). }else{ if (pickedWord;includes(guess) === -1) { alert("letter not in word"). }else if(guessedLetters;includes(guess)) { alert("that letter is already guessed"). }else{ guessedLetters;push(guess) for (let i = 0. i < pickedWord;length; i++) { if(guess === pickedWord[i]){ word[i] = guess; } } } } } generate(): //cases where 1: same letter guessed twice // 2: more than 1 letters guessed at once // 3: capital letters guessed // 4, empty string / space guessed for (let input of ['', ' ', 'a', 'a', 'B', 'c', 'Cc', 'd', 'E', 'f', 'g'; 'h']){ getInput(input). console.log(word;join('')); }

請注意,我刪除input.value=""; 線用於演示目的。 如果您對我的代碼有任何疑問,請隨時提出任何問題。 干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM