javascript - 为什么我在使用这个数组时会得到 NaN ?

标签 javascript arrays

我正在尝试通过《Eloquent Javascript》这本书来改进我的 JS。我正在研究 question 5.2 的解决方案并且希望得到一些关于为什么它是错误的并返回 NaN 的解释。我的解决方案是:

function average(array) {
  function plus(a, b) { return a + b; }
  return array.reduce(plus) / array.length;
}

var byName = {};
ancestry.forEach(function(person) {
  byName[person.name] = person;
});

var knownMothers = ancestry.filter(function(person){
  return person.mother != null;
});

var ageDifferences = knownMothers.map(function(person){
  return person.born - [person.mother].born

});

console.log(knownMothers);
console.log(ageDifferences);
console.log(average(ageDifferences));

最后两个 console.log 状态返回 NaN。

ancestry 是一个格式如下的数组:

[0: {
    name:   "Carolus Haverbeke"
    sex:    "m"
    born:   1832
    died:   1905
    father: "Carel Haverbeke"
    mother: "Maria van Brussel"
}
1:  {
    name:   "Emma de Milliano"
    sex:    "f"
    born:   1876
    died:   1956
    father: "Petrus de Milliano"
    mother: "Sophia van Damme"
}]

此练习的解决方案位于上面的链接中。它在代码中使用了 byName 对象,因此绕过了输出中的 NaN。有人可以澄清为什么我需要返回 byName 对象内的元素吗?我知道它缺失了一部分,但不知道为什么,但真的很想理解。谢谢你!

我复制了下面的答案(我不太明白)供引用:

var differences = ancestry.filter(function(person) {
  return byName[person.mother] != null;
}).map(function(person) {
  return person.born - byName[person.mother].born;
});

console.log(average(differences));

最佳答案

我相信您对 ageDifferences 的定义缺少对 byName 的引用。 (并防止 byName[person.mother] 未设置。)

关于javascript - 为什么我在使用这个数组时会得到 NaN ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906775/

相关文章:

javascript - 使用大小属性设置选择框的样式?

javascript - 如何使用 CSS 或 Javascript 创建一个看起来无限的选取框

javascript - 按钮中间有一个字形,左上角有数字

php - 分解 XML 文件

python - 如何在 python 中打印二维数组

php - mysqli 从数组更新

javascript - 如何在 Jest 运行任何测试之前全局加载 Google Maps API?

javascript - JQuery 找不到 JavaScript 找到的元素。为什么?

PHP:组合数组数组并获得最低值?

javascript - 如何按照预定的层次结构对 JavaScript 数组进行排序