【发布时间】:2020-09-11 09:25:40
【问题描述】:
重点是从现有的 listOfStudents 和 homeworkResults 对象创建新对象,这些对象与电子邮件值匹配。目标是只使用 Javascript。
以如下开头的新对象示例:
{
name: 'John',
email: 'john@gmail.com',
results: [
{
topic: 'HTML Basics',
success: true
},
{
topic: 'CSS Basics',
success: false
}
]
},
{
name: 'Jane',
email: 'jane@gmail.com',
results: [
{
topic: 'HTML Basics',
success: true
},
{
topic: 'CSS Basics',
success: true
}
]
}
这是我的代码示例。 addHwResults 功能有问题,因为它不排除其他学生的 hwResults。
var listOfStudents = [
{ name: 'John', email: 'john@gmail.com' },
{ name: 'Jane', email: 'jane@gmail.com' }
];
var hwResults = [
{ topic: 'HTML Basics', results: [ { email: 'john@gmail.com', success: true }, { email: 'jane@gmail.com', success: true } ] },
{ topic: 'CSS Basics', results: [ { email: 'john@gmail.com', success: false }, { email: 'jane@gmail.com', success: true } ] }
];
function Stud(name, email) {
const hwResults = [];
this.addHwResult = function(topic, success) {
const result = {
topic: topic,
success: success
};
hwResults.push(result);
}
this.getHomeworkResult = function() {
return hwResults;
}
}
function Lab(studentsList){
const stud = new Stud();
this.printStudList = function() {
studentsList.forEach(el => {
console.log(stud.getHomeworkResult());
});
}
this.addHwResults = function(objGet) {
objGet.results.forEach(el => {
const resultByEmail = studentsList.find(elem => elem.email === el.email);
stud.addHwResult(objGet.topic, el.success);
});
}
}
const lab = new Lab(listOfStudents);
lab.addHwResults(hwResults[0]);
lab.addHwResults(hwResults[1]);
lab.printStudList();
错误的结果如下:
【问题讨论】:
-
"出了点问题" - 请您更具体地说明什么不起作用?
-
你找到了 const resultByEmail 和什么?你不使用它。这很奇怪。
-
我多次编辑了这段代码,在这个版本中它没有被使用,但应该为了通过电子邮件结果过滤
-
您还没有为每个学生创建一个 Stud 对象,并且 Stud 对象不输出姓名和电子邮件。对象的结构是不完整的,输出和数据结构之间的生成也是如此。实际要求是什么?需要什么样的设计?仅修改 addHwResult 以生成输出将需要绕开这种情况,这违背了使用定义的对象的目的
标签: javascript oop object foreach find