我编写了一个函数,它接受一个对象数组(students3
)并打印出学生的名字和他们的平均测试分数。
var students3 = [
{
name : "Anthony",
id : 0,
grades : [{ id : 0, score : 84},{ id : 1, score : 20},{ id : 2, score : 80}]
},
{
name : "Winnie",
id : 1,
grades : [{ id : 0, score : 62},{ id : 1, score : 56},{ id : 2, score : 100}]
},
{
name : "Pawandeep",
id : 2,
grades : [{ id : 0, score : 79},{ id : 1, score : 92},{ id : 2, score : 49}]
}
];
我的解决方案:
function getAverageScore(student)
{
var sum = 0;
var grades = student.grades;
for(var i = 0; i < grades.length; i++)
{
var grade = grades[i];
sum += grade.score;
}
var avg = sum/grades.length;
return avg;
}
function printAverageGrade(students)
{
for(var i = 0; i < students.length; i++)
{
var student = students[i];
var averageScore = getAverageScore(student);
console.log(student.name, averageScore);
}
}
运行console.log(printAverageGrade(students3));
后的预期结果是:
Anthony 61.333333333333336
Winnie 72.66666666666666
Pawandeep 73.33333333333333
我的结果:
Anthony 61.333333333333336
Winnie 72.66666666666666
Pawandeep 73.33333333333333
未定义
任何人都可以告诉我为什么我的结果中出现了未定义的值?谢谢。
答案 0 :(得分:1)
printAverageGrade
函数本身会将消息记录到控制台。它没有return
语句,因此返回undefined
。
如果您将printAverageGrade(students3)
记录到控制台,则会记录undefined
。
解决方案:不要记录printAverageGrade(students3)
:
console.log(printAverageGrade(students3))
→printAverageGrade(students3)
答案 1 :(得分:1)
最后一行是函数的返回值。如果您查看getAverageScore(student)
函数,就可以看到return avg;
,这就是给出该值的原因。
printAverageGrades
不会返回任何内容,因此其返回值为undefined
。控制台日志记录虽然有效,但只要您不尝试使用它来设置任何变量,此代码就可以了。
答案 2 :(得分:0)
如果您使用浏览器的JavaScript控制台运行,是否确定您没有看到printAverageGrade
的返回值?看到这个简单的例子:
> function foo() { console.log("hello"); }
<- undefined
> foo()
hello
<- undefined
两个undefined
来自控制台,试图打印立即命令的返回值,如果我们尝试这样做:
> function foo() { console.log("hello"); return "defined"; }
<- undefined
> foo()
hello
<- "defined"
具体来说,您的示例代码使用:
console.log(printAverageGrade(students3));
由于printAverageGrade()
不返回任何内容,控制台会记录undefined
。