按最大值(包括最高匹配值)过滤对象数组

Filter an array of objects by a highest value (including highest matching values)

我不知道为什么这不起作用...

function findOldest(list) {
  let oldest = Math.max.apply(null, list.map(function(dev) { return 
  dev.age; }));
  return list.filter((dev, age) => dev[age].includes(oldest));
}

我只需要 return 最年长的人(如果最年长的年龄匹配)。 这是一个示例数组:

[
  { firstName: 'Gabriel', country: 'Monaco', age: 49, language: 'PHP' },
  { firstName: 'Odval', country: 'Mongolia', age: 38, language: 'Python' },
  { firstName: 'Emilija', country: 'Lithuania', age: 19, language: 'Python' },
  { firstName: 'Sou', country: 'Japan', age: 49, language: 'PHP' },
]

对于上面的例子,函数需要return这样:

[
  { firstName: 'Gabriel', country: 'Monaco', age: 49, language: 'PHP' },
  { firstName: 'Sou', country: 'Japan', age: 49, language: 'PHP' }, 
]

我已经研究过 reduce() 在这里也可能起作用的方法,但没有成功。

我正在学习,这是我在这里的第一个问题...请温柔点。 xD

为了自学,我查阅了所有我能想到的教程和搜索词。我不想只是得到答案,而且,我希望学习 why/how 它的工作原理。

感谢您的宝贵时间。

list.filter((dev, age) => dev[age].includes(oldest)) 没有意义,因为 age 不是外部变量,而是普通的 属性 - 值是数字,而不是数组,所以 .includes 不会工作。 我会使用 Math.max 首先确定最高年龄,然后 filter 通过具有该年龄的对象。

const list = [
  { firstName: 'Gabriel', country: 'Monaco', age: 49, language: 'PHP' },
  { firstName: 'Odval', country: 'Mongolia', age: 38, language: 'Python' },
  { firstName: 'Emilija', country: 'Lithuania', age: 19, language: 'Python' },
  { firstName: 'Sou', country: 'Japan', age: 49, language: 'PHP' },
];

const findOldest = (list) => {
  const maxAge = Math.max(...list.map(obj => obj.age));
  return list.filter(obj => obj.age === maxAge);
};
console.log(findOldest(list));