【发布时间】:2020-08-18 16:23:10
【问题描述】:
我正在尝试创建一个 HTML 视图,我需要一个特定的数组模式。我有三个这样的数组:
第一个:
classes = [
{ classid: 1, classname: "class 1" },
{ classid: 2, classname: "class 2" },
{ classid: 3, classname: "class 3" },
{ classid: 4, classname: "class 4" },
{ classid: 5, classname: "class 5" },
];
第二个:
classwithSubjectIDSubjectName = [
{ classid: 1, subjectid: 10, subjectname: "Hindi" },
{ classid: 1, subjectid: 11, subjectname: "English" },
{ classid: 2, subjectid: 11, subjectname: "English" },
{ classid:3, subjectid: 12, subjectname: "GEO" },
];
第三:
classwithtopic = [
{
classid: 1,
subjectid: 10,
topicid: 101,
topicname: "topic 1 of id 10",
},
{
classid: 1,
subjectid: 11,
topicid: 102,
topicname: "topic 1 of id 11",
},
{
classid: 2,
subjectid: 11,
topicid: 103,
topicname: "topic 1 of id 11",
},
{
classid: 2,
subjectid: 11,
topicid: 104,
topicname: "topic 2 of id 11",
},
{
classid: 2,
subjectid: 11,
topicid: 105,
topicname: "topic 3 of id ",
},
{
classid: 2,
subjectid: 11,
topicid: 106,
topicname: "topic 4 of id 11",
},
];
我需要最终的数组是这样的,
finalarray = [
{
class_id: 1,
class_name: "class1",
subjects: [
{
subejct_id: 11,
subejct_name: "English",
topics: [{topicid:108,topicname: "topic 1 of id 11 "}, {topicid:107,topicname: "topic 2 of id 11 "}],
{
subejct_id: 10,
subejct_name: "Hindi",
topics: [{topicid:106,topicname: "topic 1 of id 10 "}, {topicid:107,topicname: "topic 2 of id 10 "}],
],
},
{
class_id: 2,
class_name: "class 2",
subjects: [
{
subejct_id: 11,
subejct_name: "English",
topics: [{topicid:103,topicname: "topic 1 of id 11 "}, {topicid:104,topicname: "topic 2 of id 11 "}],
},
{
subejct_id: 12,
subejct_name: "Hindi",
topics: [{topicid:100,topicname: "topic 1 of id 12 "}, {topicid:101,topicname: "topic 2 of id 12 "}],
},
],
},
];
我尝试使用reduce但没有成功。我对代码的时间复杂度没有任何问题,因为我会处理它。任何帮助将不胜感激以实现最终数组。
编辑:
正如@HereticMonkey 所问,我在另一个类似这样的阵列上尝试了这个。
selectedSubjects=[
{ subjectName: "maths", topicName: "topic1 of maths"}
{ subjectName: "maths", topicName: "topic2 of maths"}
{ subjectName: "English", topicName: "topic1 of English "}
{ subjectName: "English", topicName: "topic2 of English "}
]
在这个数组上我应用了这个
const groups = this.selectedSubjects.reduce((acc, cur) => {
(acc[cur.subjectName] = acc[cur.subjectName] || []).push(cur.topicName);
return acc;
}, {}); // to group the array according to subject
console.log(groups);
this.array= Object.keys(groups).map((key) => ({
SubjectName: key,
topics: groups[key],
}));
在这之后我得到的结果是:
array=[
{SubjectName: "maths"
topics:["topic1 of maths", "topic2 of maths "]
},
{SubjectName: "English"
topics:["topic1 of English", "topic2 of English"]
}
]
但我不知道如何在三个数组上应用它。
【问题讨论】:
-
太好了,你的尝试在哪里?
-
请使用
reduce展示您的尝试;您可能已经很接近了,我们可以节省时间来纠正您的尝试,而不是从头开始编写新代码。 -
@HereticMonkey 更新
-
@NinaScholz 更新
-
test_2来自哪里?你真的希望你的最终数组删除没有主题或主题不包含主题的类吗?你真的想用subejct代替subject和class_id代替classId吗?也许您可以清理您的示例并详细说明要求。
标签: javascript arrays typescript