如何从对象返回属性数组?黑杰克游戏牌组生成遇阻
解决黑杰克牌组生成只返回最后一张牌的问题
嘿,我看你在写简易黑杰克游戏的牌组生成代码时卡壳了——本来要生成完整的52张牌,结果只拿到最后一组?我帮你梳理下问题出在哪,以及怎么修复!
问题根源
从你给出的代码片段来看,核心问题大概率是没有把创建好的牌对象添加到deck数组里,或者你错误地在循环里直接覆盖了deck变量(比如写成deck = [card])。这种情况下,每次循环都会替换掉之前的牌组内容,最后自然就只剩最后一张生成的牌了。
另外,你把deck作为参数传入createDeck函数,但全局已经声明了deck变量,这可能会造成作用域混淆,建议简化一下。
修正后的完整代码
// 用const声明固定的花色和牌值,避免意外修改 const suits = ['Hearts', 'Clubs', 'Diamonds', 'Spades']; const 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++) { // 创建单张牌的对象,用单数属性名区分全局数组 const card = { value: values[i], suit: suits[j] }; // 关键!把每张牌推入deck数组末尾 deck.push(card); } } return deck; } // 调用函数生成完整牌组 const fullDeck = createDeck(); console.log(fullDeck); // 现在就能看到52张完整的牌啦
关键修复点
- 添加
deck.push(card):这是最核心的一步,只有把每张创建好的牌推入数组,才能积累出完整的52张牌组 - 避免覆盖deck变量:不要在循环里直接给
deck赋值,而是用push方法追加元素 - 优化变量声明:用
const声明不会修改的花色和牌值数组,提升代码稳定性 - 区分属性名与全局数组:把牌对象的属性名改成
value和suit(单数),和全局的values、suits数组区分开,代码可读性更强
内容的提问来源于stack exchange,提问作者LickingFilth
相关产品推荐
相关产品推荐

