【发布时间】:2019-02-08 17:22:34
【问题描述】:
我们有 2 个数组,一个是 AnswersList[],它包含问题的所有可能答案。
我们将 AnswersList[] 拆分为 6 个单独的数组 {性别、年龄、残疾、种族、宗教、性取向}。如果我们使用genderList[]来解决这个问题。
主数组是 EqualityAnswers[],它是 IApplicantAnswers 类型。
import {IAnswers} from "../Enum/answer.model";
export interface IApplicantAnswers {
ApplicantAnswersKey: number;
CompetitionKey: number;
Gender: IAnswers;
Age: IAnswers;
SexualOrientation: IAnswers;
Religion: IAnswers;
EthnicOrigin: IAnswers;
Disability:IAnswers;
}
我们想要做的是检查同样是 IAnswer 类型的 genderList[]
export interface IAnswers {
AnswerKey: number;
QuestionKey: number;
Name: string;
Description: string;
}
所以我想做的是针对每种类型的 genderList[i].AnswerKey 我想看看有多少人在 EqualityAnswers[] 中选择了它。
最初我正在考虑循环遍历 genderList[],然后过滤 EqualityAnswers[].Gender.AnswerKey 并返回长度。
问题是将其分配给 ResourceList 数组
export class ResourceList {
Name: string;
Count: number;
}
调用genderCountList:ResourceList[];
这个想法是,genderCountList 将是 {name:"female", count:2}, {name:"male", count:5}, {name:"prefer not to say", count: 3}
然后我将能够使用它来动态构建我的表。这将允许我们在数据库级别添加答案。
唯一的问题是我有思维锁定,无法思考如何构建它。
【问题讨论】:
-
我的建议是使用 Map (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…) 类型的类型来分组你的答案,如果你想有这个 {name:"female", count: 3} 作为性别地图的关键应该是性别,值是计数。如果性别之前没有定义,你将在你的地图中插入一个新的对,否则你将增加计数(值),在你可以生成数组之后
-
感谢您对此的回复。所以我有点困惑。我将按如下方式使用它 `getGenderCount(): any { return this.genderList.map(function(item,index){ // 在这里我需要检查 item.Key 是否在 equalData.Gender 中以及有多少在将其存储到新的 item.Description 和 count 返回 item 数组之前发生的次数;}); }`
-
完全正确.. 这样您只需遍历循环一次并同时构建所有过滤结果
-
感谢您的帮助。我已经提出了答案,但如果您想发布答案,那么我会选择它作为答案。
标签: arrays typescript for-loop angular6