2015-08-30 3 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

Означает ли факт, что '[1,2] === [1,2]' ложь в JS отвечает на ваш вопрос, Havamere? (Не уверен, что я это понимаю.) –

+0

Этот факт не помогает ситуации, которую я вызвал. Я могу показать полный код, но я хочу построить это самостоятельно, насколько смогу. – Havamere

ответ

3

В сравнении массива Javascript речь идет о личности, а не о содержании; другими словами, === между двумя выражениями, когда они являются массивами, возвращает true, только если они относятся к одному и тому же объекту массива, а не к двум массивам, содержащим одни и те же вещи.

Вы можете обойти эту проблему путем преобразования обе стороны строки первой:

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

Хорошо, так что, если бы я использовал только ==, то тогда принимал бы как истинный? Дело в том, что если человек должен был ввести массив, который вызвал «Хит», они могли бы просто ввести это в дополнительные 4 раза и с игрой. Это в основном игра типа «линкор» в 2D-массиве. Я, конечно, готов работать с кавычками, если мне нужно. – Havamere

+0

Спасибо 6502, что решило проблему. – Havamere

+0

@Havamere: использование '==' не решит, потому что это то же самое, что '===', когда два выражения одного типа. Разница только в том, что '==' делает преобразование типа, когда типы различны ('===' вместо этого просто возвращает 'false'). – 6502

Смежные вопросы