如何从对象返回一个属性数组并连接它们

时间:2018-04-19 22:50:28

标签: javascript arrays object blackjack

我正在做一个简单的二十一点游戏,而且我被困在从物体返回。我的目标是返回所有52张牌,但我得到的只是最后一个阵列。

let suits = ['Hearts', 'Clubs', 'Diamonds', 'Spades'],
values = ['Ace', 'King', 'Queen', 'Jack',
    'Ten', 'Nine', 'Eight', 'Seven', 'Six',
    'Five', 'Four', 'Three', 'Two'
];

let deck = [];
function createDeck(deck) {
    for (let i = 0; i < values.length; i++) {
        for (let j = 0; j < suits.length; j++) {
            let card = {
                values: values[i],
                suit: suits[j]
            };
            deck.push(card);
        }
    }
    return deck;
}

function cardName(deck) {
    let name = [];
    for (let i = 0; i < deck.length; i++) {
        name = deck[i].values + " of " + deck[i].suit;
    }
    return name;
}

我已经尝试了一个对象数组,调试了很多次,双循环,for ... in循环,但没有一个工作。我最好的镜头是当它返回最后一个阵列时,即“两个黑桃”。 我真的很感激一些指导

3 个答案:

答案 0 :(得分:0)

cardName在for循环的每次迭代中覆盖“name”(这就是为什么你只看到最后一个值)。使用

name.push(deck[i].values + " of " + deck[i].suit)

答案 1 :(得分:0)

每次覆盖所有对象时,在for循环中的函数cardName中,但不向数组添加值。这就是为什么你只收到最后一个值。只需将name = ...更改为name.push(...)

答案 2 :(得分:0)

要添加上述答案(将name =切换为name.push(将解决问题),这也可能是一个了解Javascript功能区域的绝佳机会。

function cardName(deck) {
    let name = [];
    for (let i = 0; i < deck.length; i++) {
        name = deck[i].values + " of " + deck[i].suit;
    }
    return name;
}

可以改写为

function cardName(deck) {
    return deck.map(card => card.values + ' of ' + card.suit);
}

至少,如果我在假设如何在这里创建deck对象时更正。

如果这是您有兴趣探索的领域,请随时与我们联系!