JavaScript如何按优先级筛选生成符合积分阈值要求的响应数据
实现方案
思路说明
- 首先提取
lifePriority中的所有物品key,按照优先级值从小到大排序(数值越小优先级越高,优先兑换) - 初始化累计积分变量为0,初始化结果对象为空
- 遍历排序后的物品列表:
- 检查当前物品是否在
availbility中存在对应的积分值 - 计算加上当前物品积分后的总积分,如果不超过
AvailblePointsToBuy,就把该物品加入结果对象,同时累加积分 - 如果超过就直接跳过当前物品
- 检查当前物品是否在
- 遍历完成后输出结果对象即可
完整实现代码
// 原始变量 const AvailblePointsToBuy = 100; const lifePriority = { "cloth":1,"bike":2,"cycle":3 }; const availbility = {"cycle":40,"car":80,"cloth":10,"bike":50 }; // 1. 按优先级排序物品key const sortedItems = Object.keys(lifePriority).sort((a,b) => lifePriority[a] - lifePriority[b]); let totalPoints = 0; const result = {}; // 2. 遍历筛选符合条件的物品 for (const item of sortedItems) { // 跳过不在可用列表里的物品 if (!availbility.hasOwnProperty(item)) continue; const currentPoint = availbility[item]; // 检查加上当前积分是否超限额 if (totalPoints + currentPoint <= AvailblePointsToBuy) { result[item] = currentPoint; totalPoints += currentPoint; } } console.log(result); // 输出 { cloth: 10, bike: 50, cycle: 40 }
代码说明
- 排序逻辑保证了完全按照
lifePriority指定的优先级顺序选择物品,不会出现低优先级先选的情况 - 会自动过滤
lifePriority里存在但availbility里没有的物品 - 累计积分逻辑严格控制总消耗不超过设定的上限值
内容的提问来源于stack exchange,提问作者Pavan k
相关产品推荐
相关产品推荐

