javascript - 如何递归地深入嵌套的打字稿模型?并将这些深层路径映射为对象 [key: value]
问题描述
我有一个挑战。
如何递归地深入嵌套的打字稿模型?并将这些深层路径映射为对象 [key: value]。
其中 key - 是列名或可识别的名称 & value 是遍历的路径(深度)。
我所说的深度是这个 someObject.level1.level2.level3.level4 ......就像那样。
想象一下,我有几个 Typescript 接口(所有外部文件)。
一个接口指向另一个接口,然后是另一个接口,依此类推。
例如:
export interface University {
name: string;
type: string;
locationDetails: Location;
revenue: Revenue;
departments: Departments[];
collegesUnder: Colleges[];
status: boolean;
}
这是描述位置的界面
export interface Location {
street: string;
state: string;
postCode: number;
}
这是描述部门的界面
export interface Departments {
name: string;
category: string;
coursesOffered: Courses[];
}
这是描述学院的界面
export interface College {
collegeName: string;
collegeLocation: Location;
coursesOffered: Courses[];
studentsEnrolled: Students[];
}
这是描述学生的界面
export interface Student {
studentName: string;
department: Department;
course: Course;
age: number;
address: string;
otherInfo: OtherInfo;
}
这是描述课程的界面
export interface Course {
name: string;
classifiedUnder: string;
subCourses: Course[];
}
所以你可以有一堆打字稿文件。它们都是单独的文件,并由约定 interfaceName.model.ts 命名。interfaceName 对应于每个接口标识符名称。前端正在使用 Angular 开发。
我将从包含大学信息的服务器获取 json 数据。& 所有这些数据都将显示为一个表格(没有任何嵌套)。
在每个标题的顶部,我将有一个输入字段 &,因为表格中的使用类型会被过滤掉。
为了深入搜索,我将不得不访问这些模型的深层嵌套路径。对于每种类型的搜索请求,我必须分别执行此操作。
& 每当在这些接口中的任何一个中新添加一些属性时,我都必须来并相应地进行更改。
所以我想出了一个解决方案:
将每个列名映射到对象的深度:
例如,如果用户在学生姓名列中搜索:
return universities.filter(university => {
retrurn university.colleges.some(college => {
return college.students.some(student => {
return student.name
})
})
})
所以我的想法是将每个列名映射到每个深度,以便我可以直接访问它:
像这样:
searchMap = {
universityName: university.name,
universityType: university.type;
universityLocationStreet: university.location.street;
universityLocationState: university.location.state;
universityLocationPostcode: university.location.postcode;
... Like so...
studentsName: university[i].colleges[j].students[k].student.name
// see how the nesting goes on...
}
所以关键是,如果 typescript.model.ts 文件中发生任何更改(将来如果他们对属性进行任何更改)我想自动管理它。
所以我想找到一个解决方案来递归地通过这些打字稿接口(它们都是外部的并且将在类型定义中导入)并从中制作一个 searchMap(深度图)对象。
解决方案
推荐阅读
- firebase - 如何修复“错误加载文档”Firestore
- button - 如何在 panel builder 600 中设置按钮密码保护?
- python - 散景。如何匹配多个y轴的比例?
- java - 从用户扫描 10 个整数
- python - 我需要为我的数据集实现肘法以找到 k-means 聚类所需的最佳聚类
- xml - 为什么它在本地工作正常并且服务器获取 groovy.util.slurpersupport.Attributes 无法转换为 java.util.Map 错误?
- vuejs3 - 无法解析组件?
- c# - C# Selenium 驱动程序 - 完成后关闭所有网页
- php - 用 PHP 替换两点和所有中间点
- reactjs - 当我单击按钮并更新输入 React 的 de 值时如何在输入中调用事件 onChange