问题描述
我有一个包含对象的数组,我想返回包含寿命最长的人的对象。我已经走了这么远,但我现在卡住了。
const findTheOldest = function(people) {
for (let i = 0; i < people.length; i++) {
people[i].yearOfBirth - yearOfDeath
}
}
const people = [
{
name: "Carly",yearOfBirth: 1942,yearOfDeath: 1970,},{
name: "Ray",yearOfBirth: 1962,yearOfDeath: 2011,{
name: "Jane",yearOfBirth: 1912,yearOfDeath: 1941,]
解决方法
您只需要遍历对象数组,并一直存储年龄比您目前拥有的最年长的人大的人。
const people = [
{
name: "Carly",yearOfBirth: 1942,yearOfDeath: 1970,},{
name: "Ray",yearOfBirth: 1962,yearOfDeath: 2011,{
name: "Jane",yearOfBirth: 1912,yearOfDeath: 1941,]
const findTheOldest = function(people) {
let oldest = {};
let oldestAge = 0;
for (let i = 0; i < people.length; i++) {
let age = people[i].yearOfDeath - people[i].yearOfBirth
if( age >= oldestAge) {
oldestAge = age;
oldest = people[i];
}
}
return oldest;
}
console.log(findTheOldest(people));
您只需要维护一个变量,您可以将其与迄今为止的最大值进行比较,最终您将获得总体最大值。就这么回吧。如果超过一个人的年龄相同,您可以选择做什么;此解决方案返回第一个。
const people = [
{
name: "Carly",]
function findTheOldest(people) {
let diff = 0,res = {};
people.forEach(item => {
if(diff < item.yearOfDeath - item.yearOfBirth) {
diff = item.yearOfDeath - item.yearOfBirth;
res = item;
}
});
return res;
}
console.log(findTheOldest(people));
您可以按如下方式使用 reduce:
people.reduce((acc,cur) => !acc || (acc.yearOfDeath - acc.yearOfBirth) < (cur.yearOfDeath - cur.yearOfBirth) ? cur : acc)
,
Array.protoype.reduce 可能是您正在寻找的东西:
const people = [{name:"Carly",yearOfBirth:1942,yearOfDeath:1970},{name:"Ray",yearOfBirth:1962,yearOfDeath:2011},{name:"Jane",yearOfBirth:1912,yearOfDeath:1941}];
const findOldest = (p) => p.reduce((acc,e) => {
const lived = x => x.yearOfDeath - x.yearOfBirth
return lived(e) > lived(acc) ? e : acc
},p[0])
console.log(findOldest(people))