2015-08-30 53 views
0

我正在構建一個遊戲,我希望從提示中獲取玩家輸入,並將它們與已使用的輸入進行比較,如果兩次選擇相同的東西,則拒絕選擇。這裏是我的相關代碼:爲什麼我的比較陣列不能工作?

var playerChoiceRow = 0; 
var playerChoiceColumn = 0; 
var playerAttackArray = []; 

function playerAttack(playerChoiceRow,playerChoiceColumn) { 
for (var i=0; i<playerAttackArray.length; i++){ 
    if ([playerChoiceRow,playerChoiceColumn] === playerAttackArray[i]){ 
     alert("You have already attacked this space, please choose another."); 
     playerChoiceRow = prompt("Please choose a number between 0 and 5."); 
     playerChoiceColumn = prompt("Please choose a number between 0 and 5."); 
    } 
} 
if (playerChoiceRow === undefined){ 
    alert("Please choose a number between 0 and 5!"); 
    playerChoiceRow = prompt("Please choose a number between 0 and 5."); 
} 
if (playerChoiceColumn === undefined){ 
    alert("Please choose a number between 0 and 5!"); 
    playerChoiceColumn = prompt("Please choose a number between 0 and 5."); 
} 
playerAttackArray.push([playerChoiceRow,playerChoiceColumn]); 

while (playerCounter || computerCounter <=4){ 
    var playerChoiceRow = prompt("Please select row of attack. (0 though 5)")-''; 
    var playerChoiceColumn = prompt("Please select column of attack. (0 though 5)")-''; 
    playerAttack(playerChoiceRow,playerChoiceColumn); 
    if (playerCounter == 5){ 
     alert("You have sunk all enemy boats!"); 
     break; 
    } 
} 
+1

那麼究竟是什麼問題? – Mureinik

+1

在JS回答你的問題時,'[1,2] === [1,2]'是否是錯誤的事實,Havamere? (不知道我明白了。) –

+0

這實際上並沒有幫助我造成的情況。我可以顯示完整的代碼,但我想盡我所能地自行構建它。 – Havamere

回答

3

在JavaScript數組比較是關於身份,而不是內容;換句話說,當兩個表達式之間的數組爲===時,只有當數組引用了相同的數組對象時,才返回true,而不是它們是包含相同事物的兩個數組。

你可以解決這個問題,首先雙方轉換爲字符串:

if (""+[playerChoiceRow,playerChoiceColumn] === ""+playerAttackArray[i]) ... 
+0

好吧,所以如果我只使用==會那麼接受爲真?現在問題的關鍵在於,如果一個人輸入一個導致「命中」的陣列,他們可以簡單地再輸入4次,然後在遊戲中輸入。它基本上是2D陣列上的戰艦風格遊戲。如果需要,我肯定願意使用引號。 – Havamere

+0

謝謝6502,這確實解決了這個問題。 – Havamere

+0

@Havamere:當兩個表達式是相同類型時,使用'=='不會解決,因爲它與'==='相同。不同之處在於'=='在類型不同時進行類型轉換('==='而不是返回'false')。 – 6502