雄辩的javascript 5.2母子

雄辩的javascript 5.2母子,javascript,Javascript,我有一个问题,因为我的代码返回的结果与解决方案代码不同。我发现区别在于过滤函数 function ageDiff(p) { return p.born - p.mother.born } //p.mother.born doesn't work 链接到练习: 我的过滤功能: ancestry.filter(function(p) { return p.mother != null; }) 返回33个结果,而解决方案中的筛选函数仅返回17个: ancestry.filter(functio

我有一个问题,因为我的代码返回的结果与解决方案代码不同。我发现区别在于过滤函数

function ageDiff(p) { return p.born - p.mother.born } //p.mother.born doesn't work 
链接到练习:

我的过滤功能:

ancestry.filter(function(p) { return p.mother != null; }) 
返回33个结果,而解决方案中的筛选函数仅返回17个:

ancestry.filter(function(person) { return byName[person.mother] != null;})
哪一个是正确的?为什么第二个函数返回不同的结果

第二个问题:

我不知道如何为映射函数提取母亲的出生日期

function ageDiff(p) { return p.born - p.mother.born } //p.mother.born doesn't work 

谢谢,KK

您得到不同结果的原因是您没有测试相同的东西

您的问题中未显示以下代码:

var byName = {};
ancestry.forEach(function(person) {
  byName[person.name] = person;
});
…它使用数组中每个人的属性填充byName对象,以便您可以使用byName[此处的人名]查找该人

考虑到这一点,您的代码:

ancestry.filter(function(p) { return p.mother != null; }) 
…表示过滤祖先数组并仅保留其母属性不为null的元素

官方应答码:

ancestry.filter(function(person) { return byName[person.mother] != null;})
…表示筛选祖先数组并保留byName对象中存在指定.mother的元素。也就是说,那些指定的母亲本身在祖先数组中的元素——并非所有元素都是:Emma de Milliano是一个母亲不为null但在数组中也没有自己条目的人的例子。它正在测试的事实!=null有点误导,因为实际上byName没有空值的属性:什么!=空测试在本例中真正起作用的是测试!=未定义,因为!=运算符认为null和undefined相等

我不知道如何为映射函数提取母亲的出生日期

function ageDiff(p) { return p.born - p.mother.born } //p.mother.born doesn't work 

通过使用byName[p.mother]从byName对象检索她的记录,可以找到母亲的详细信息。

与您的问题无关,请返回p.mother!=无效的真:假;可以简化为只返回p.mother!=null。谢谢:代码已更新。为什么第二个函数返回不同的结果?因为p.妈妈null与byName[person.mother]不同!=无效的