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



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

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

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

[
{ 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' },
]

对于上面的例子,函数需要返回这个:

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

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

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

我查阅了我能想到的每一个教程和搜索词,以便自己学习。我不想只得到答案,但我也希望了解它为什么/如何工作。

谢谢你抽出时间。

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

最新更新