我正在尝试创建一个函数来检查两副牌的顺序是否相同。
我编写了一个辅助函数 cardEq 来测试两张卡片是否相同,并且它可以工作。它在deckEq 函数中不起作用。
//Card Struct
//value 1 is ace, 11 is Jack, 12 is Queen, and 13 is King
function Card(suit, value, color){
this.suit = suit,
this.value = value,
this.color = color
}
//Check if two Cards are the same
function cardEq(card1, card2){
if(card1.suit === card2.suit
&& card1.value === card2.value
&& card1.color === card2.color){
return true;
} else {return false;}
}
//Check if two Decks/arrays of Cards are in the same order
function deckEq(deck1, deck2){
let i = 0;
let flag = false;
while (i < 53){
let x = deck1[i];
let y = deck2[i];
if(cardEq(x, y) === true){
flag = true;
i = i + 1;
} else {flag = false; break;}
}
return flag;
}
我希望它返回 true 或 false,但它会抛出错误:TypeError: Cannot read property 'suit' of undefined at cardEq (repl:2:12) at deckEq (repl:7:8)
编辑:我将 while 语句中的 (i < 53) 更改为 (i < 52)。感谢@Christopher 和@traktor53 的捕获。我猜问题是该函数正在对数组中不存在的项目(第 52 个)调用 cardEq。由于这是为了比较套牌,它应该只运行到第 51 个元素(第 52 张牌)。