按最大值(包括最高匹配值)过滤对象数组
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));
我不知道为什么这不起作用...
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));