HTML表单价格计算:如何高效匹配数值对应的区间结果?
高效实现区间数值匹配计算需求
问题描述
我有一组0到1000000之间的数值区间列表,每个区间对应一个结果数值,用于HTML表单的价格计算。曾考虑用数组集合或if-else链式判断,但想找最高效的实现方案。示例区间如下:
| Range | Result |
|---|---|
| 0 - 40000 | 2000 |
| 40001-50000 | 2500 |
| 50001-60000 | 3000 |
希望传入如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
相关产品推荐
相关产品推荐

