You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从对象返回属性数组?黑杰克游戏牌组生成遇阻

解决黑杰克牌组生成只返回最后一张牌的问题

嘿,我看你在写简易黑杰克游戏的牌组生成代码时卡壳了——本来要生成完整的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:14:52