[英]Checking 3 values if are the same with If Statement
我正在構建一個Tic Tac Toe游戲,我想知道這種語法是否有效。 似乎該程序有時運行正確,有時不運行,所以我希望您提出意見。
If ( (spacesArray[0] &&
spacesArray[1] &&
spacesArray[2] == (userDraw || compDraw))){
}
因此,基本上,如果它們具有相同的值(“ x”或“ o”),我將檢查數組中的位置0,1,2。 這個語法正確嗎?
**編輯
對於任何想要在此處查看完整項目的人。 https://codepen.io/Ispaxan/pen/ZaRjZW?editors=0001
您的意思是相同的值。 因此,您需要檢查的第一件事是3個項目。
當3個值相等時,您只需要檢查其中一個等於userDraw
或compDraw
並完成即可。
通過這種方式。 您可以使if
語句運行得更快,因為當第一個或第二個條件失敗時,javascript引擎將不會檢查剩余條件。
if (spacesArray[0] === spacesArray[1] &&
spacesArray[0] === spacesArray[2] &&
(spacesArray[0] === userDraw || spacesArray[0] === compDraw) )
編輯:我正在檢查Codepen並注意到這一點。 如果您檢查spacesArray[0] === (userDraw || compDraw)
這將是一個錯誤。 因為(userDraw || compDraw)
將始終返回userDraw。
我認為,當您僅自己放置spacesArray[0]
,它將檢查它是對還是錯。
您可能要嘗試:
if ( (spacesArray[0] == (userDraw || compDraw) && spacesArray[1] == (userDraw || compDraw) && spacesArray[2] == (userDraw || compDraw))){ }
我將對userDraw
或compDraw
進行單獨檢查,以便您知道誰獲勝。 另外,出於JavaScript古怪的平等原因,請使用===
而不是==
。
// destructure array
const [a, b, c] = spacesArray;
// check if a is not null or undefined
// check if a and b are equal
// check if a and c are equal
if (a && a === b && a === c) {
// all 3 are the same value
// check if userDraw wins
if (a === userDraw) {
console.log(`${userDraw} wins`;
}
// check if compDraw wins
if (a === compDraw) {
console.log(`${compDraw} wins`;
}
}
**詳細說明||
原因 在這種情況下將無法正常工作。 **
設定:
const userDraw = 'x';
const compDraw = 'y';
const spacesArray = ['y', 'y', 'y'];
// (userDraw || compDraw) will be 'x'
案件:
if (spacesArray[0] &&
spacesArray[1] &&
spacesArray[2] == (userDraw || compDraw)
這是失敗的地方:
if ('y' && // -> true
'y' && // -> true
'y' === 'x') // -> false
案件:
if (spacesArray[0] === spacesArray[1] &&
spacesArray[0] === spacesArray[2] &&
spacesArray[0] === (userDraw || compDraw))
這是失敗的地方:
spacesArray[0] === spacesArray[1] // 'y' === 'y' -> true
spacesArray[0] === spacesArray[2] // 'y' === 'y' -> true
spacesArray[0] === (userDraw || compDraw) // 'y' === 'x' -> false
首先驗證答案之間的相等性,最后確定其O或X
if ( spacesArray[0] == spacesArray[1] &&
spacesArray[0] == spacesArray[2] &&
spacesArray[0] == (userDraw || compDraw))
首先是if
,不是If
,其次不是,這不是正確的語法。 每個測試都必須完整且獨立於其他測試,如:
if (spacesArray[0] == (userDraw || compDraw) &&
spacesArray[1] == (userDraw || compDraw) &&
spacesArray[2] == (userDraw || compDraw)){
}
但是,就您而言,這沒有必要,因為您一開始就執行了錯誤的測試。 您應該檢查是否spacesArray
中的所有3個元素都具有相同的值,這意味着它們都是“ X”或所有“ O”,並且可以使用Array.prototype.every()
方法最有效地完成此操作。 。
function allX(currentValue) { return currentValue === "X"; } function allO(currentValue) { return currentValue === "O"; } var spacesArray1 = ["X", "O", "O"]; var spacesArray2 = ["X", "X", "O"]; var spacesArray3 = ["X", "X", "X"]; var spacesArray4 = ["O", "O", "O"]; console.log(spacesArray1.every(allX), spacesArray1.every(allO)); console.log(spacesArray2.every(allX), spacesArray2.every(allO)); console.log(spacesArray3.every(allX), spacesArray3.every(allO)); console.log(spacesArray4.every(allX), spacesArray4.every(allO)); // So, to test for tic-tac-toe: function test(player){ if(spacesArray3.every(allX) || spacesArray3.every(allO)){ console.log(player + " wins!"); } else { console.log("Not yet!"); } } test("Scott");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.