我正试图用Javascript中的卡片对象制作一个牌组(我是新手)。我制作了一个卡片类和一个卡片功能,它使用for循环用卡片对象填充卡片阵列。在这个for循环中,我设置了等级和套件(Card类中的值字段用于卡之间的比较)。因此,在每个循环结束时,它会显示所有令人敬畏的牌,但是当我尝试打印整个牌组时,它会打印出最后一个元素的数组长度。这是博洛尼亚因为这很容易我只是没有习惯于j.s.请帮我解释阵列为什么会这样做。
以下是输出:
1 of Spades
2 of Aces
3 of Clubs
4 of Diamonds
5 of Spades
6 of Aces
7 of Clubs
8 of Diamonds
9 of Spades
10 of Aces
Jack of Clubs
Queen of Diamonds
King of Spades
1 of Aces
2 of Clubs
3 of Diamonds
4 of Spades
5 of Aces
6 of Clubs
7 of Diamonds
8 of Spades
9 of Aces
10 of Clubs
Jack of Diamonds
Queen of Spades
King of Aces
1 of Clubs
2 of Diamonds
3 of Spades
4 of Aces
5 of Clubs
6 of Diamonds
7 of Spades
8 of Aces
9 of Clubs
10 of Diamonds
Jack of Spades
Queen of Aces
King of Clubs
1 of Diamonds
2 of Spades
3 of Aces
4 of Clubs
5 of Diamonds
6 of Spades
7 of Aces
8 of Clubs
9 of Diamonds
10 of Spades
Jack of Aces
Queen of Clubs
King of Diamonds
then this 52 times
[ { rank: 'King', value: 12, suite: '', suit: 'Diamonds' },
//card object
var Card = {
rank: 0,
value: '',
suite: ""
};
//deck object returns array of non shuffled deck
function Deck() {
var deck = [];
var i;
for (i = 0; i < 52; i++) {
var card = Card;
if (i % 4 == 0)
card.suit = "Spades";
if (i % 4 == 1)
card.suit = "Aces";
if (i % 4 == 2)
card.suit = "Clubs";
if (i % 4 == 3)
card.suit = "Diamonds";
card.value = i % 13;
card.rank = card.value + 1;
if (card.rank == 11)
card.rank = 'Jack';
if (card.rank == 12)
card.rank = 'Queen';
if (card.rank == 13)
card.rank = 'King';
console.log(card.rank + " of " + card.suit);
deck.push(card);
}
console.log(deck);
return deck;
};
答案 0 :(得分:0)
添加的suit
是因为您有拼写错误并且正在设置suit
属性而不是suite
。 (card.suit="Aces"; ....
)
您面临的奇怪行为是因为您没有从卡中创建新对象,您只需更改前一个对象并将其添加到数组中,并且由于它是通过引用传递的,因此您基本上正在改变数组中的所有卡(在每个循环中更新所有卡)。您需要在每次迭代时新建Card对象,以创建新的引用。
var card = new Card();
// Update card.
deck.push(card);