gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:33:02 25 4
gpt4 key购买 nike

我正在尝试通过《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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com