Eloquent JavaScript第5章练习
问题描述:
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
方法迭代祖先对象,只选择具有母亲的元素,然后将其以某种方式映射到另一个数组中。
答
从我所了解的情况来看,forEach方法循环访问数组,并通过key(name)和value(person object)对将数组中的所有值传递给byName集合,这些对可以通过他/她的名字。 地图方法将创建一个新的数组,用于存储每个人的年龄与他/她的母亲与已过滤的数组之间的差异(已删除没有母亲的人)。变量差异将存储这些值 对不起,我的英语。