基于Array#reduce如何查找符合最高a+b及最高c优先级条件的数组对象
实现思路
- reduce的累加器用来存储当前遍历到的符合优先级规则的最优对象
- 每轮遍历分别计算当前元素和累加器中对象的
a+b总和,按优先级规则对比:- 当前元素
a+b总和更高:直接替换累加器为当前元素 - 两者
a+b总和相等:对比c值,当前元素c更高则替换累加器 - 其余情况保持原有累加器不变
- 当前元素
- 初始值设为
null兼容空数组场景,避免数组为空时报错
实现代码
const getTopPriorityItem = (arr) => { return arr.reduce((best, current) => { // 初始状态直接取第一个元素 if (!best) return current; const bestSum = best.a + best.b; const currentSum = current.a + current.b; // 优先对比a+b总和 if (currentSum > bestSum) return current; // 总和相等对比c值 if (currentSum === bestSum && current.c > best.c) return current; // 其余情况保留原有最优项 return best; }, null); }; // 测试示例 const data = [ { id: 1, a: 12, b: 75, c: 11 }, { id: 2, a: 65, b: 14, c: 32 }, { id: 3, a: 32, b: 23, c: 45 }, { id: 4, a: 22, b: 1, c: 3 }, ]; console.log(getTopPriorityItem(data)); // 输出:{ id: 1, a: 12, b: 75, c: 11 }
方案优势
- 时间复杂度为O(n),只需要遍历数组一次,比先排序再取首项的O(nlogn)性能更好
- 没有额外的中间数组生成,内存占用更低
- 逻辑清晰直观,符合优先级判断的思维路径
内容的提问来源于stack exchange,提问作者RoktSe
相关产品推荐
相关产品推荐

