2017-02-11 7 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章の練習からのものです。祖先内のデータはここには含まれません。私には2つの質問があります。Eloquent JavaScript第5章エクササイズ

私の最初の質問は、変数byNameについてのもので、forEachメソッド内での使用方法についてです。何が起きているのかについての私の見解は、要素を見つけて何らかの形でbyNameオブジェクトにその要素を入力するために、祖先オブジェクトを反復処理しているということです(forEach)。

変数differencesに関する別の質問があります。起こっていることの私の意見は、母親を持つ要素だけを選択して祖先オブジェクトを反復し、それが何らかの形で別の配列にマップされるということです。

答えて

1

私は理解しているから、forEachメソッドは、配列をループし、キー(名前)と値(人物オブジェクト)のペアbyNameコレクションに配列からのすべての値を置くことができます/彼女の名前。 mapメソッドは、フィルタリングされた配列(母親を持っていない人は削除されています)から各人の年齢とその母親との差異を保存する新しい配列を作成します。変数の違いはそれらの値を格納します 私の英語のために申し訳ありません。

関連する問題