JavaScript实现getMostSenior函数返回所有最高龄人员数组求助
正确实现getMostSenior函数的方案
原代码问题分析
你原有代码的问题在于reduce回调始终只返回单个人员对象,遇到相同最大年龄的后续人员时会直接覆盖前一个匹配项,最终仅返回最后一个最大年龄的人员,且返回值是对象而非要求的数组。
推荐实现(易读性优先)
先计算出列表中的最大年龄,再过滤出所有年龄等于最大年龄的人员,代码简洁易维护,常规场景下性能完全足够:
const getMostSenior = humans => { const maxAge = Math.max(...humans.map(item => item.age)); return humans.filter(item => item.age === maxAge); };
高性能实现(大数据量场景)
仅对列表做一次遍历,用reduce动态收集所有最高龄人员,适合处理十万级以上的超大列表:
const getMostSenior = humans => { return humans.reduce((result, current) => { if (result.length === 0) return [current]; if (current.age > result[0].age) return [current]; if (current.age === result[0].age) return [...result, current]; return result; }, []); };
验证结果
用你提供的测试数据调用上述函数,返回结果和预期输出完全一致。
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

