📅  最后修改于: 2023-12-03 14:42:34.480000             🧑  作者: Mango
有时候我们需要按照数组中的某个字段进行分组,并只保留最高分的记录。本文将介绍如何使用Javascript实现这一功能。
Array.reduce()
方法来实现分组。例如,以下代码按照 name
字段进行分组:const arr = [
{ name: '张三', score: 80 },
{ name: '李四', score: 90 },
{ name: '王五', score: 85 },
{ name: '张三', score: 90 },
{ name: '李四', score: 95 },
];
const grouped = arr.reduce((result, item) => {
result[item.name] = result[item.name] || [];
result[item.name].push(item);
return result;
}, {});
Array.reduce()
方法来实现过滤。例如,以下代码保留每个组中最高分的记录:const filtered = Object.values(grouped).reduce((result, group) => {
const maxScore = group.reduce((max, item) => {
return Math.max(max, item.score);
}, 0);
const highScoreItems = group.filter(item => item.score === maxScore);
result.push(...highScoreItems);
return result;
}, []);
const arr = [
{ name: '张三', score: 80 },
{ name: '李四', score: 90 },
{ name: '王五', score: 85 },
{ name: '张三', score: 90 },
{ name: '李四', score: 95 },
];
const grouped = arr.reduce((result, item) => {
result[item.name] = result[item.name] || [];
result[item.name].push(item);
return result;
}, {});
const filtered = Object.values(grouped).reduce((result, group) => {
const maxScore = group.reduce((max, item) => {
return Math.max(max, item.score);
}, 0);
const highScoreItems = group.filter(item => item.score === maxScore);
result.push(...highScoreItems);
return result;
}, []);
console.log(filtered);
输出:
[
{ name: '张三', score: 90 },
{ name: '李四', score: 95 },
{ name: '王五', score: 85 },
]
本文介绍了如何使用Javascript按照数组中的某个字段进行分组,并只保留每个分组中最高分的记录。如果您有任何问题或建议,请在评论区留言。