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

如何实现基于4个select选项的段位阶梯价格计算?

搞定段位价格计算的完整方案

嘿,我来帮你理清这个4个select选项的价格计算逻辑!首先咱们先把规则吃透,再一步步实现。

第一步:先把各段位的价格映射理清楚

首先得把每个段位下5个分段的价格明确下来,比如你说的青铜(Bronze)是5→$0、4→$2、3→$4、2→$6、1→$8,其他段位逻辑完全一样,只是基础价格不同。咱们可以把这个整理成一个清晰的配置表,方便后续调用:

// 你可以根据实际需求修改各段位的价格数值
const rankPriceMap = {
  Bronze: [0, 2, 4, 6, 8], // 数组索引0对应分段5,索引4对应分段1
  Silver: [10, 12, 14, 16, 18],
  Gold: [20, 22, 24, 26, 28],
  Platinum: [30, 32, 34, 36, 38],
  Diamond: [40, 42, 44, 46, 48]
};

这里我把分段5对应数组第一个元素(索引0),分段1对应最后一个(索引4),这样后面根据分段找价格会很方便。

第二步:明确4个Select的作用(假设是起始+目标的段位/分段选择)

我猜你的4个select应该是用来选起始段位、起始分段、目标段位、目标分段对吧?那计算逻辑分两种情况:

情况1:起始和目标是同一个段位

比如都是青铜,那直接算从起始分段到目标分段的价格总和就行。举个例子:从青铜4到青铜1,就是$2+$4+$6+$8=$20。

情况2:起始和目标是不同段位

比如从青铜2到白银3,得分三部分加起来:

  1. 起始段位里,从起始分段到该段位最高分段(青铜1)的价格总和:$6+$8=$14
  2. 中间所有完整段位的总价(如果有的话,比如从青铜到铂金,中间的白银、黄金要全加)
  3. 目标段位里,从最低分段(白银5)到目标分段(白银3)的价格总和:$10+$12+$14=$36
    把这三部分加起来,$14+$36=$50就是总价。

第三步:代码实现(JavaScript)

我给你写了一套可以直接用的代码,注释很清楚,你可以直接嵌入到你的页面里:

// 定义段位的高低顺序,用来判断段位之间的先后
const rankOrder = ["Bronze", "Silver", "Gold", "Platinum", "Diamond"];

// 价格配置表,上面已经解释过啦
const rankPriceMap = {
  Bronze: [0, 2, 4, 6, 8],
  Silver: [10, 12, 14, 16, 18],
  Gold: [20, 22, 24, 26, 28],
  Platinum: [30, 32, 34, 36, 38],
  Diamond: [40, 42, 44, 46, 48]
};

// 辅助函数:计算同一个段位内,两个分段之间的价格总和
function calcWithinRank(rank, startDiv, endDiv) {
  const prices = rankPriceMap[rank];
  // 把分段转成数组索引:分段5→0,分段1→4
  const startIdx = 5 - startDiv;
  const endIdx = 5 - endDiv;
  let total = 0;

  // 判断是从低分段到高分段,还是反过来,然后累加价格
  if (startIdx <= endIdx) {
    for (let i = startIdx; i <= endIdx; i++) {
      total += prices[i];
    }
  } else {
    for (let i = startIdx; i >= endIdx; i--) {
      total += prices[i];
    }
  }
  return total;
}

// 辅助函数:计算一整个段位的总价格(比如青铜5到青铜1的总价)
function calcFullRankPrice(rank) {
  return rankPriceMap[rank].reduce((sum, price) => sum + price, 0);
}

// 主函数:计算总价格
function calcTotalPrice(startRank, startDiv, targetRank, targetDiv) {
  const startRankPos = rankOrder.indexOf(startRank);
  const targetRankPos = rankOrder.indexOf(targetRank);

  // 如果是同一个段位,直接算内部总和
  if (startRankPos === targetRankPos) {
    return calcWithinRank(startRank, startDiv, targetDiv);
  }

  let total = 0;

  // 1. 加上起始段位剩余部分的价格(从起始分段到该段位最高分段)
  total += calcWithinRank(startRank, startDiv, 1);

  // 2. 加上中间所有完整段位的总价
  for (let i = startRankPos + 1; i < targetRankPos; i++) {
    total += calcFullRankPrice(rankOrder[i]);
  }

  // 3. 加上目标段位前半部分的价格(从最低分段到目标分段)
  total += calcWithinRank(targetRank, 5, targetDiv);

  return total;
}

第四步:和HTML Select结合使用

假设你的HTML是这样的:

<!-- 起始选择 -->
<select id="startRank">
  <option value="Bronze">Bronze</option>
  <option value="Silver">Silver</option>
  <option value="Gold">Gold</option>
  <option value="Platinum">Platinum</option>
  <option value="Diamond">Diamond</option>
</select>
<select id="startDivision">
  <option value="5">5</option>
  <option value="4">4</option>
  <option value="3">3</option>
  <option value="2">2</option>
  <option value="1">1</option>
</select>

<!-- 目标选择 -->
<select id="targetRank">
  <option value="Bronze">Bronze</option>
  <option value="Silver">Silver</option>
  <option value="Gold">Gold</option>
  <option value="Platinum">Platinum</option>
  <option value="Diamond">Diamond</option>
</select>
<select id="targetDivision">
  <option value="5">5</option>
  <option value="4">4</option>
  <option value="3">3</option>
  <option value="2">2</option>
  <option value="1">1</option>
</select>

<button onclick="showTotalPrice()">计算总价格</button>
<div id="priceResult"></div>

那你再加一个触发计算的函数,就能让用户点击按钮看到结果了:

function showTotalPrice() {
  // 获取用户选择的选项值
  const startRank = document.getElementById("startRank").value;
  const startDiv = parseInt(document.getElementById("startDivision").value);
  const targetRank = document.getElementById("targetRank").value;
  const targetDiv = parseInt(document.getElementById("targetDivision").value);

  // 计算总价格
  const totalPrice = calcTotalPrice(startRank, startDiv, targetRank, targetDiv);

  // 显示结果
  document.getElementById("priceResult").textContent = `总价格:$${totalPrice}`;
}

这样一套下来,用户选好4个选项后,点击按钮就能自动算出对应的总价格啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:15:30