简体   繁体   English

无论顺序如何,都比较 JavaScript 中的两个字符串?

[英]Comparing two strings in JavaScript regardless of order?

I'm trying to make a jumbled word game and I'm having trouble finding a way to compare the inputted guess with the answer.我正在尝试制作一个混乱的文字游戏,但我无法找到一种将输入的猜测与答案进行比较的方法。

Here's what I've tried so far:这是我到目前为止所尝试的:

 var answer = document.getElementById("attempt").value; function guess() { var word = ["dog", "cat"]; var randomize = word[Math.floor(Math.random() * word.length)]; var shuffled = []; for (var i = 0; i < randomize.length; i++) { shuffled.push(randomize[i]); } shuffled.sort(function() { return 0.5 - Math.random(); }); scrambledWord.innerHTML = shuffled.join(""); var sortedShuffled = shuffled.split('').sort(); var sortedAnswer = answer.split("").sort(); if (sortedShuffled.includes(sortedAnswer)) { display.innerHTML = "Correct"; } }
 <div id="scrambledWord"></div> <input type="text" id="attempt"> <button onclick="guess()">Guess</button> <br> <div id="display"></div>

I also tried it with我也试过了

if (sortedShuffle == sortedAnswer) {

But no dice.但没有骰子。

Please help?请帮忙? I'm not smart.我不聪明。

A link to a JSFiddle https://jsfiddle.net/ohkm1vn7/指向 JSFiddle https://jsfiddle.net/ohkm1vn7/的链接

Solution with some refactoring.进行一些重构的解决方案。

 const answerInput = document.getElementById("attempt"); function guess() { const answer = answerInput.value; const word = ["dog", "cat"]; const randomize = word[Math.floor(Math.random() * word.length)]; const shuffled = []; for (let i = 0; i < randomize.length; i++) { shuffled.push(randomize[i]); } shuffled.sort(function() { return 0.5 - Math.random(); }); scrambledWord.innerHTML = shuffled.join(""); const sortedShuffled = shuffled.sort().join(""); const sortedAnswer = answer.toLowerCase().split("").sort().join(""); display.textContent = (sortedShuffled === sortedAnswer)? "Correct": "Fail" }
 <div id="scrambledWord"></div> <input type="text" id="attempt"> <button onclick="guess()">Guess</button> <br> <div id="display"></div>

You save the value of the field when the page loads ( var answer =... ), and never check it again.您在页面加载时保存该字段的值( var answer =... ),并且不再检查它。 You need to get that value when checking that it's correct.在检查它是否正确时,您需要获取该值。

Also, I'm guessing you want the scrambled word to be displayed before the user clicks on the button?另外,我猜您希望在用户单击按钮之前显示加扰的单词? Then, you need to do that before, and not in the guess function.然后,您需要在之前这样做,而不是在guess function 中。

Here is a way:这是一种方法:

 var $ = document.querySelector.bind(document), $scrambledWord = $("#scrambledWord"), $attempt = $("#attempt"), $display = $("#display"), words = ["snake", "turtle"], correct = null; $("#new-game-btn").addEventListener('click', resetGame); $("#guess-btn").addEventListener('click', guess); resetGame(); // Do it on page load function resetGame() { // Choose a random word correct = words[ Math.floor(Math.random() * words.length) ]; // Display the scrambled word $scrambledWord.innerHTML = scrambleWord(correct); // Reset the field and focus it $attempt.value = ''; $attempt.focus(); // Reset the display $display.innerHTML = 'Will you guess what it is?'; } function scrambleWord(word) { return word.split('').sort(() => 0.5 - Math.random()).join(''); } function guess() { var answer = $attempt.value; $display.innerHTML = answer === correct? 'Correct': 'Nope'; }
 <button id="new-game-btn">New game</button> <div id="scrambledWord"></div> <input id="attempt"> <button id="guess-btn">Guess</button> <div id="display"></div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM