【问题标题】:Processing an Immutable.js list and extracting unique objects处理 Immutable.js 列表并提取唯一对象
【发布时间】:2020-11-20 17:05:06
【问题描述】:

我有以下使用不可变的类型脚本。我希望使用不可变列表来处理学生并生成唯一的学生列表。我的初始列表可能有重复的学生对象,我可以通过 studentId 过滤掉它们。

我面临的问题是,在迭代列表时,我无法从 Student 对象访问 studentId 属性,因此无法访问 studentId。

if (d && !studentIdSeen.has(d!.studentId)

export interface StudentProperties {
  studentId: number;
  student: string;
  region: string;
  active: boolean;
}
export interface Student extends TypedRecord<Student>, StudentProperties { }
export const studentFactory = makeTypedFactory<StudentProperties, Student>({ studentId: -1, student: '', region: '', active: true });


REDUX CALL 

case types.FETCH_STUDENT_DATA_SUCCESS: {
       let fetchedStudents = List(action.data.map(item => studentFactory(item)));
      console.log("Fetched student data ==> " + fetchedStudents);

      let uniqueStudents: Student[] = [];
       let studentIdSeen: Set<number>;
       fetchedStudents.forEach(d => {
         if (d && !studentIdSeen.has(d!.studentId) { //error here , not able to access studentId attribute
           uniqueStudents.push(d);
           studentIdSeen.add(d!.studentId);////error here , not able to access studentId attribute
         }
       });
       console.log("List of unique students = " + uniqueStudents);
       return state.set('students', List(uniqueStudents));
    }

如果我在 state.set('students',fetchedStudents) 中返回 fetchedStudents,它可以正常工作,因此正在获取的数据没有问题。

【问题讨论】:

    标签: javascript typescript react-redux


    【解决方案1】:

    拳头: d!.studentId 错了,你只想要 d.studentId

    都在:!studentIdSeen.has(d!.studentId)

    和:studentIdSeen.add(d!.studentId);

    其次,如果可能的话,您可以强制转换为删除重复项的集合。然后返回数组:

    let uniqueStudents: Student[] = [... new Set(fetchedStudents)]

    或者

      let uniqueStudents: Student[] = [];
       fetchedStudents.forEach(d => {
         if (d && !uniqueStudents.has(x => x.studentId === d.studentId)) {
           uniqueStudents.push(d);
         }
       });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多