如何从带有对象的数组中返回最年长的人

问题描述

我有一个包含对象的数组,我想返回包含寿命最长的人的对象。我已经走了这么远,但我现在卡住了。

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))