今天有一个需求,有一些学生成绩的数据,里面包含一些重复信息,需要从数组对象中过滤掉重复的数据。
例如,有一个包含学生成绩的数组,其中每个学生的成绩可能出现多次。我们需要从这个数组中过滤掉重复的成绩,只保留每个学生最高的分数。
可以使用 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,
// },
// ];
以上就是过滤数组中重复数据的一个思路和实现,希望这篇文章对您有所帮助。
未经允许不得转载:Web前端开发资源网 » 根据规则过滤掉数组中的重复数据