2017-02-11 123 views
-1
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 differences = ancestry.filter(function(person) { 
    return byName[person.mother] != null; 
}).map(function(person) { 
    return person.born - byName[person.mother].born; 
}); 

console.log(average(differences)); 
// 31.2 

这段代码来自“Eloquent JavaScript”一书的第5章练习。这里不包括祖先内的数据。我有两个问题。Eloquent JavaScript第5章练习

我的第一个问题是关于变量byName以及它如何在forEach方法中使用。我对发生的事情的看法是,forEach方法通过祖先对象迭代来查找元素,然后以某种方式在byName对象中输入所述元素。

我有关于变量differences的另一个问题。我对发生的事情的看法是filter方法迭代祖先对象,只选择具有母亲的元素,然后将其以某种方式映射到另一个数组中。

回答

1

从我所了解的情况来看,forEach方法循环访问数组,并通过key(name)和value(person object)对将数组中的所有值传递给byName集合,这些对可以通过他/她的名字。 地图方法将创建一个新的数组,用于存储每个人的年龄与他/她的母亲与已过滤的数组之间的差异(已删除没有母亲的人)。变量差异将存储这些值 对不起,我的英语。