我整个下午一直在使用此代码,我无法弄清楚为什么会出现此错误。这是代码:
16: NaN
17: NaN
18: NaN
19: NaN
20: NaN
21: NaN

我得到的输出是:
16: 43.5
17: 51.2
18: 52.8
19: 54.8
20: 84.7
21: 94
虽然所需的输出是:
{{1}}
这是一个内置代码沙箱的挑战:http://eloquentjavascript.net/code/#5.3
答案 0 :(得分:1)
该行
byCentury[centName].push(ancestry[i].age = ancestry[i].died - ancestry[i].born);
不会将ancestry[i]
推送到您的数组中 - 它会推送ancestry[i].age
的值。所以,稍后,你有:
var ages = byCentury[century].map(function(person) {
return person.age;
});
person
实际上是一个数字,因此person.age
将是未定义的。
您目前遇到的另一个问题是当您来到ancestry
阵列中的某个人时,会发生什么事情,其出生世纪尚未存储在byCentury
中。
if (centName in byCentury) {
...
} else {
byCentury[centName] = [centName];
}
不存储年龄,而是存储代表该世纪的数字。修复它的一种方法是将该块更改为:
if (byCentury[centName] === undefined) {
byCentury[centName] = [];
}
byCentury[centName].push(ancestry[i].died - ancestry[i].born);
最后只需在循环中记录century + ': ' + average(byCentury[centName])
。最后,添加一些舍入以使您的输出与练习相匹配,并且您将获得最终解决方案。