保留数组最后一个值的Javascript对象数组

时间:2016-09-12 18:23:43

标签: javascript arrays

我正试图用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;
};

1 个答案:

答案 0 :(得分:0)

添加的suit是因为您有拼写错误并且正在设置suit属性而不是suite。 (card.suit="Aces"; ....

您面临的奇怪行为是因为您没有从卡中创建新对象,您只需更改前一个对象并将其添加到数组中,并且由于它是通过引用传递的,因此您基本上正在改变数组中的所有卡(在每个循环中更新所有卡)。您需要在每次迭代时新建Card对象,以创建新的引用。

var card = new Card();
// Update card.
deck.push(card);