我正在做一个简单的二十一点游戏,而且我被困在从物体返回。我的目标是返回所有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循环,但没有一个工作。我最好的镜头是当它返回最后一个阵列时,即“两个黑桃”。 我真的很感激一些指导
答案 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
对象时更正。
如果这是您有兴趣探索的领域,请随时与我们联系!