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

如何查找并移除多维数组中的数字 实现Bingo游戏中奖判定

Bingo游戏兑奖逻辑实现方案

需求说明

开发供家人游玩的Bingo(宾果)游戏,需要实现:

  • 已叫号数字的高效处理方案
  • 自动识别所有数字全匹配的中奖票券,将中奖票存入独立数组,简化兑奖流程
    目前游戏其余功能已开发完成,现有票券数据结构如下:
var tickets = [
     ['T1',1,2,8,10,23,18,44],
     ['T2',2,3,3,6,45,12,55],
     ['T3',4,7,10,42,55,45,60],
     ['T4',3,5,3,6,55,68,85],
     ['T5',1,4,3,6,66,74,80],
 ];

实现思路

不需要做「从票券里移除已叫号数字」的操作,直接用集合做存在性判断,逻辑更简单、性能更高,也不会破坏原始票券数据:

  • 用Set结构存储所有已经叫过的数字,单数字查询时间复杂度为O(1),比数组遍历的O(n)效率高很多
  • 每次叫号后遍历所有未中奖的票券,跳过第一个票号字段,校验票上数字是否全部存在于已叫号集合中
  • 校验通过的票直接推入独立的中奖票数组,后续兑奖直接读这个数组即可,不需要重复校验

可直接复用的代码

// 已叫号数字集合
const calledNumbers = new Set();
// 独立存储中奖票的数组,可按需存票号或者完整票数据
const winningTickets = [];

// 叫号触发方法
function onNumberCalled(num) {
  calledNumbers.add(num);
  checkAllTickets();
}

// 中奖校验逻辑
function checkAllTickets() {
  for (const ticket of tickets) {
    const ticketId = ticket[0];
    // 已经中奖的票跳过,避免重复计入
    if (winningTickets.some(item => item[0] === ticketId)) continue;
    // 从索引1开始是票面上的数字,全部匹配则标记为中奖
    const isWin = ticket.slice(1).every(num => calledNumbers.has(num));
    if (isWin) {
      winningTickets.push(ticket);
    }
  }
}

针对你现有票券里存在重复数字的情况(比如T2、T4都包含两个3),上述逻辑可以直接适配,只要对应数字被叫过就算匹配,不需要额外处理重复值计数,符合常规Bingo游玩规则。

内容的提问来源于stack exchange,提问作者Robert Alexander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:51:35