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

基于JavaScript实现多博彩网站赛事赔率无重复组合生成问询

实现方案

核心思路

要生成满足「三个赛果分别来自不同博彩网站」的赔率组合,分两步走:

  1. 先把分散在各个网站的赛果按类型(主队胜、客队胜、平局)归类,方便后续组合匹配;
  2. 遍历所有可能的赛果组合,筛选出三个赛果所属网站完全不重复的有效组合。

代码实现

// 假设你的原始数据存储在这个变量里
const bookmakers = [
  {
    "key": "betmgm",
    "title": "BetMGM",
    "last_update": "2022-12-14T04:30:40Z",
    "markets": [
      {
        "key": "h2h",
        "outcomes": [
          { "name": "AC Milan", "price": 138 },
          { "name": "Tottenham Hotspur", "price": 200 },
          { "name": "Draw", "price": 225 }
        ]
      }
    ]
  },
  {
    "key": "barstool",
    "title": "Barstool Sportsbook",
    "last_update": "2022-12-14T04:30:22Z",
    "markets": [
      {
        "key": "h2h",
        "outcomes": [
          { "name": "AC Milan", "price": 130 },
          { "name": "Tottenham Hotspur", "price": 220 },
          { "name": "Draw", "price": 230 }
        ]
      }
    ]
  },
  {
    "key": "twinspires",
    "title": "TwinSpires",
    "last_update": "2022-12-14T04:17:45Z",
    "markets": [
      {
        "key": "h2h",
        "outcomes": [
          { "name": "AC Milan", "price": 130 },
          { "name": "Tottenham Hotspur", "price": 220 },
          { "name": "Draw", "price": 230 }
        ]
      }
    ]
  }
];

// 1. 按赛果类型整理数据:key是赛果名称,value是该赛果对应的所有网站赔率信息
const outcomeMap = {};
bookmakers.forEach(bookmaker => {
  const h2hMarket = bookmaker.markets.find(m => m.key === 'h2h');
  if (!h2hMarket) return; // 跳过没有h2h市场的网站
  
  h2hMarket.outcomes.forEach(outcome => {
    const { name, price } = outcome;
    if (!outcomeMap[name]) outcomeMap[name] = [];
    outcomeMap[name].push({
      bookMaker: bookmaker.title,
      name,
      price
    });
  });
});

// 提取三类赛果的赔率列表(这里要和你的赛果名称对应,比如主队是AC Milan,客队是Tottenham Hotspur)
const [homeOdds, awayOdds, drawOdds] = [
  outcomeMap["AC Milan"],
  outcomeMap["Tottenham Hotspur"],
  outcomeMap["Draw"]
];

// 2. 生成所有符合要求的组合:三个赛果来自不同网站
const validCombinations = [];
if (homeOdds && awayOdds && drawOdds) {
  homeOdds.forEach(home => {
    awayOdds.forEach(away => {
      if (home.bookMaker === away.bookMaker) return; // 网站重复,跳过
      drawOdds.forEach(draw => {
        if (draw.bookMaker === home.bookMaker || draw.bookMaker === away.bookMaker) return;
        // 三个网站都不重复,加入有效组合
        validCombinations.push([home, away, draw]);
      });
    });
  });
}

// 输出结果,和你期望的格式完全一致
console.log(validCombinations);

关键细节说明

  • 数据整理:通过outcomeMap把同一赛果的所有网站赔率归到一起,避免后续重复遍历原始数组;
  • 组合筛选:三重循环里加入网站名称的判断,确保每个组合里的三个赛果分别来自不同网站;
  • 边界处理:先判断三类赛果的赔率列表是否存在,避免出现undefined报错;如果网站总数少于3个,自动不会生成任何有效组合。

扩展优化

如果需要筛选出最优赔率组合(比如每个赛果选最高赔率且网站不重复),可以在生成validCombinations后,通过计算组合的预期收益或者直接比较赔率值来排序筛选:

// 示例:找出每个赛果赔率最高的有效组合(如果存在)
const bestCombination = validCombinations.sort((a, b) => {
  // 计算组合的总赔率权重(这里可以换成你的数学公式逻辑)
  const totalA = a.reduce((sum, item) => sum + item.price, 0);
  const totalB = b.reduce((sum, item) => sum + item.price, 0);
  return totalB - totalA;
})[0];

console.log("最优组合:", bestCombination);

内容的提问来源于stack exchange,提问作者Daniel Alves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:15:38