JavaScript如何从人员对象数组中返回最长寿者的姓名而非年龄数值
问题解决思路
你现在的问题出在map步骤只返回了年龄数值,丢失了和原人物对象的关联,自然没法拿到对应的姓名。调整方向很简单:直接对完整的people数组做排序,排序时实时计算两个人的年龄做比较,排序完成后拿到的就是最长寿的完整人物对象,再取name属性即可。
修改后的参考代码
const people = [ { name: "Carly", yearOfBirth: 1066, }, { name: "Ray", yearOfBirth: 1962, yearOfDeath: 2011, }, { name: "Jane", yearOfBirth: 1912, yearOfDeath: 1941, }, ] // 先封装计算年龄的工具函数,复用逻辑更清晰 const getAge = function(person) { const death = person.yearOfDeath || new Date().getFullYear(); return death - person.yearOfBirth; } const findTheOldest = function() { // 直接对people数组按年龄升序排列 const sortedPeople = people.sort((a, b) => getAge(a) - getAge(b)); // 数组最后一项就是年龄最大的人,返回姓名即可 return sortedPeople[sortedPeople.length - 1].name; }; findTheOldest(); // 执行结果为 "Carly"
核心调整点说明
- 新增单独的
getAge工具函数,避免相同的年龄计算逻辑重复编写,代码更易维护 - 没有单独提取年龄数组,直接对原人物对象数组排序,保留了所有属性信息
- 排序后直接取最大年龄对应的完整对象,除了
name外如果后续需要其他属性也可以直接获取
内容的提问来源于stack exchange,提问作者user16343752
相关产品推荐
相关产品推荐

