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

JavaScript:如何从对象数组获取匹配数量范围的正确折扣层级?

问题:根据订单数量匹配折扣层级时结果不符合预期

我有一个名为tiers的对象数组,以及订单数量变量ordersQuanity,希望根据订单数量从数组中获取对应范围的折扣层级项。使用find方法实现时得到了非预期结果:实际输出为{id: 1, discount_percent:0, quantity:6, title:"Tier 1"},但预期输出应该是{id: 3, discount_percent:10, quantity:10, title:"Tier 3"}。

相关代码如下:

let tiers = [
   {id: 1, discount_percent:0, quantity:6, title:"Tier 1"},
   {id: 2, discount_percent:5, quantity:8, title:"Tier 2"},
   {id: 3, discount_percent:10, quantity:10, title:"Tier 3"},
   {id: 4, discount_percent:12, quantity:12, title:"Tier 4"},
   {id: 5, discount_percent:14, quantity:14, title:"Tier 5"},
   {id: 6, discount_percent:20, quantity:16, title:"Tier 6"},
   {id: 7, discount_percent:40, quantity:18, title:"Tier 7"},
   {id: 8, discount_percent:50, quantity:50, title:"Tier 8"},
]
function calculateDiscount(){
   const ordersQuanity = 10;
   const tier = tiers.find((_tier) => _tier.quantity <= ordersQuanity);
   ...
}

问题原因

find方法的特性是返回数组中第一个满足条件的元素。你的判断条件是_tier.quantity <= ordersQuanity,数组里第一个符合该条件的就是id为1的项(6<=10),所以直接返回了它,而非你需要的最大符合条件的层级项。

解决方案

这里提供三种可行的实现方式:

方式1:倒序排序后使用find

先将数组按quantity从大到小排序,再用find找到第一个符合条件的项,即为最大匹配层级:

function calculateDiscount(){
   const ordersQuanity = 10;
   // 复制原数组并倒序排序,避免修改原数组
   const sortedTiers = [...tiers].sort((a, b) => b.quantity - a.quantity);
   const tier = sortedTiers.find((_tier) => _tier.quantity <= ordersQuanity);
   console.log(tier); // 输出预期的Tier3
}

方式2:筛选后取最后一项

利用原数组quantity递增的特性,先筛选出所有符合条件的项,再取筛选结果的最后一个元素:

function calculateDiscount(){
   const ordersQuanity = 10;
   const eligibleTiers = tiers.filter((_tier) => _tier.quantity <= ordersQuanity);
   const tier = eligibleTiers[eligibleTiers.length - 1];
   console.log(tier);
}

方式3:使用reduce直接遍历查找

通过reduce遍历数组,直接记录符合条件的最大层级项,无需生成新数组,效率更高:

function calculateDiscount(){
   const ordersQuanity = 10;
   const tier = tiers.reduce((prev, current) => {
       return current.quantity <= ordersQuanity && current.quantity > prev.quantity ? current : prev;
   }, tiers[0]);
   console.log(tier);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:01:23