根据规则过滤掉数组中的重复数据

今天有一个需求,有一些学生成绩的数据,里面包含一些重复信息,需要从数组对象中过滤掉重复的数据。

例如,有一个包含学生成绩的数组,其中每个学生的成绩可能出现多次。我们需要从这个数组中过滤掉重复的成绩,只保留每个学生最高的分数。

可以使用 Array.prototype.filter() 方法来过滤掉数组中的重复数据。该方法接受一个回调函数作为参数,判断数组中的每个元素是否满足某个条件。如果回调函数返回 true,则该元素将被保留在新的数组中。否则,该元素将被过滤掉。

以下是过滤掉数组中的重复数据的示例:

const numbers = [1, 2, 3, 4, 5, 1, 2, 3];

const uniqueNumbers = numbers.filter((number, index, arr) => {
  return arr.indexOf(number) === index;
});

console.log(uniqueNumbers); // [1, 2, 3, 4, 5]

这段代码使用 Array.prototype.filter() 方法来过滤数组 numbers 中的重复数据。回调函数 (number, index, arr) => { return arr.indexOf(number) === index; } 检查数组 arr 中每个元素 number 是否只出现一次。如果元素 number 只出现一次,则回调函数返回 true,该元素将被保留在新的数组 uniqueNumbers 中。否则,回调函数返回 false,该元素将被过滤掉。

我们还可以使用 Array.prototype.filter() 方法来根据更复杂的规则过滤掉数组中的重复数据。

例如,我们可以根据对象的某个属性来过滤掉重复的数据。可以参考下面的示例:

const students = [
  { name: "John", score: 90 },
  { name: "Mary", score: 80 },
  { name: "John", score: 95 },
  { name: "Mary", score: 85 },
  { name: "Mary", score: 75 },
];

const uniqueStudents = students.filter((student, index, arr) => {
  return arr.findIndex((s) => s.name === student.name) === index;
});

console.log(uniqueStudents);

// [
//   {
//     name: 'John',
//     score: 90,
//   },
//   {
//     name: 'Mary',
//     score: 80,
//   },
// ];

还可以只针对分数小于等于 80 的进行过滤,大于 80 的直接返回:

const uniqueStudents = students.filter((student, index, arr) => {
  return student.score > 80 || arr.findIndex((s) => s.name === student.name) === index;
});

console.log(uniqueStudents);

// [
//   {
//     name: 'John',
//     score: 90,
//   },
//   {
//     name: 'Mary',
//     score: 80,
//   },
//   {
//     name: 'John',
//     score: 95,
//   },
//   {
//     name: 'Mary',
//     score: 85,
//   },
// ];

以上就是过滤数组中重复数据的一个思路和实现,希望这篇文章对您有所帮助。


未经允许不得转载:前端资源网 - w3h5 » 根据规则过滤掉数组中的重复数据

赞 (0)
分享到: +

评论 沙发

Avatar

换个身份

  • 昵称 (必填)
  • 邮箱 (选填)