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

HTML表单价格计算:如何高效匹配数值对应的区间结果?

高效实现区间数值匹配计算需求

问题描述

我有一组0到1000000之间的数值区间列表,每个区间对应一个结果数值,用于HTML表单的价格计算。曾考虑用数组集合或if-else链式判断,但想找最高效的实现方案。示例区间如下:

RangeResult
0 - 400002000
40001-500002500
50001-600003000

希望传入如45000这样的数值时,能返回对应的2500,如何避免冗长的if-else链实现该需求?

解决方案

1. 预定义阈值数组 + 二分查找(大区间量首选)

把区间的上限值和对应结果整理成有序数组,用二分查找快速定位,时间复杂度O(log n),区间越多优势越明显:

// 按区间上限升序排列的数组,元素格式:[区间上限, 对应结果]
const priceRanges = [
  [40000, 2000],
  [50000, 2500],
  [60000, 3000],
  // 可继续扩展更多区间,比如[1000000, xxx]
];

function getPrice(input) {
  let left = 0;
  let right = priceRanges.length - 1;
  let result = 0; // 无匹配时的默认值,可按需调整

  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    const [max, price] = priceRanges[mid];
    
    if (input <= max) {
      result = price;
      right = mid - 1; // 尝试匹配更靠前的区间
    } else {
      left = mid + 1;
    }
  }

  return result;
}

// 测试
console.log(getPrice(45000)); // 输出 2500

2. 配置数组 + 遍历(少量区间首选)

如果区间数量不多,直接遍历配置数组即可,代码简洁易维护:

const priceRules = [
  { min: 0, max: 40000, result: 2000 },
  { min: 40001, max: 50000, result: 2500 },
  { min: 50001, max: 60000, result: 3000 },
];

function getPrice(input) {
  const matchedRule = priceRules.find(rule => input >= rule.min && input <= rule.max);
  return matchedRule ? matchedRule.result : 0; // 无匹配返回默认值
}

console.log(getPrice(45000)); // 输出 2500

3. 数学公式计算(规律区间专属)

如果你的区间是等间隔递增的(比如每10000区间涨500),直接用数学计算性能最优:

function getPrice(input) {
  if (input <= 40000) return 2000;
  if (input <= 1000000) {
    // 计算超出40000的部分有多少个10000区间
    const step = Math.ceil((input - 40000) / 10000);
    return 2000 + step * 500;
  }
  return 0; // 超出范围的默认值
}

console.log(getPrice(45000)); // 输出 2500
console.log(getPrice(55000)); // 输出 3000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:01:17