1

我不熟悉使用类型脚本和不可变对象。我不确定实现这一目标的最佳方法是什么。

我有以下类型的对象

export interface StudentProperties {
  studentId: number;
  studentName: string;
  active: boolean;
  subjects : string;
}
export interface Student extends TypedRecord<Student>, StudentProperties { }

我有一个不可变的学生名单 List students 。由于学生可以完成多个科目,因此我的 studentId 和 StudentName 跨科目重复

如果已经有一个具有相同 studentId 的 Student 对象,我想返回一个只有第一个 Student 的 StudentId 的 List

例子

  • studentId、StudentName、活动、主题
  • 1,山姆,真,数学
  • 2,马克,假,数学
  • 1,山姆,真实,英语
  • 4、克拉克,真实,英语

我要返回的学生列表不应包括第三行中具有 studentId 1 的 Sam,因为它已经看到了一个 studentId 1

列表中的预期学生对象

  • 1,山姆,真,数学
  • 2,马克,假,数学
  • 4、克拉克,真实,英语

过滤重复的 studentId 并返回由 studentId 唯一的 Student 对象列表的最佳方法是什么。如果学生 ID 重复,则只考虑最先看到的学生对象。

4

1 回答 1

0

您可以使用 array.reduce 方法。

假设您的数组是data可变的。

const res = data.reduce((prev, curr) => { 
    const index = prev.findIndex((item) => item.studentId === curr.studentId);
    if(index === -1) {
       return [...prev, curr];
    }
    return prev;
}, []);

console.log(res);
于 2020-11-19T14:06:55.860 回答