Javascript错误 - NaN

时间:2015-06-23 13:11:35

标签: javascript

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



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

1 个答案:

答案 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])。最后,添加一些舍入以使您的输出与练习相匹配,并且您将获得最终解决方案。