JavaScript如何跳过vendorBidId为null项查找对象数组bidAmount最小值
正确实现代码
方案1:先过滤再计算(推荐,可读性更高)
先筛选出所有vendorBidId不为null的有效项,再计算bidAmount最小值:
// 筛选有效投标项 const validBids = event.filter(item => item.vendorBidId !== null); // 仅需要最小bidAmount数值时使用 const minBidAmount = validBids.reduce((minVal, current) => { return current.bidAmount < minVal ? current.bidAmount : minVal; }, Infinity); // 需要获取最小bid对应的完整对象时使用 const minBidItem = validBids.reduce((minItem, current) => { return current.bidAmount < minItem.bidAmount ? current : minItem; }, validBids[0] || {});
方案2:单轮reduce同时完成过滤和计算
不需要额外生成过滤后的数组,性能更优:
const minBidAmount = event.reduce((minVal, current) => { // 跳过vendorBidId为null的无效项 if (current.vendorBidId === null) return minVal; return current.bidAmount < minVal ? current.bidAmount : minVal; }, Infinity);
原有代码错误原因
- 未过滤
vendorBidId为null的项,会将这些项的bidAmount=0纳入比较,得到错误的最小值0- 未给
reduce设置初始值,当数组为空或无符合条件的有效项时,会直接抛出类型错误
用你提供的测试数据运行上述代码,最终得到的最小bidAmount为10000,符合预期。
内容的提问来源于stack exchange,提问作者Sreerag G
相关产品推荐
相关产品推荐

