📜  javascript 按最高组过滤数组 - Javascript (1)

📅  最后修改于: 2023-12-03 14:42:34.480000             🧑  作者: Mango

Javascript 按最高组过滤数组

有时候我们需要按照数组中的某个字段进行分组,并只保留最高分的记录。本文将介绍如何使用Javascript实现这一功能。

实现步骤
  1. 对原数组按照分组字段进行分组。可以使用 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;
}, {});
  1. 对分组后的数组中每个组进行过滤,保留最高分的记录。可以使用 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;
}, []);
  1. 返回过滤后的数组。
示例代码
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按照数组中的某个字段进行分组,并只保留每个分组中最高分的记录。如果您有任何问题或建议,请在评论区留言。