如何从对象 return 属性数组并将它们连接起来

How to return from object an array of properties and connect them

我正在玩一个简单的 21 点游戏,但在 returning from object 时卡住了。我的目标是得到return所有的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 循环,但是 none 成功了。我最好的镜头是 return 是最后一个数组,即 'Two of Spades'。 我非常感谢一些指导

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

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

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

补充上述答案(将 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 对象的假设是正确的。

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