既に回答されていますが、追加質問について回答します。
else以降は、名前のリストには存在しないのにダメージのリストにだけ存在する場合や、戻り値がundefinedになった場合に、dictに新しくエントリを作るという理解でしょうか。
その通りです。
もしも、分岐処理をせず、「名前のリストには存在しないのにダメージのリストにだけ存在する場合」は dict.get(p)
の返り値が undefined
になります。
undefined に数値を加算すると評価値が NaN になるので、分岐処理させてNaN値になるのを防いでいるのでしょう。
個人的には、ダメージ計算リストと名前リストの処理順を逆にするのがわかりやすくてよいと思います。
- ダメージ計算リストを
dict
に格納 - 名前リストにあり、
dict
にない場合、0で初期化
なお、キーに対応する要素の存在判定をする場合、Map.prototype.has()
を使用するのが妥当です。
if (dict.has(p)) {
dict.set(p, 0)
}
②以下の部分について、arrayをアルファベット順にソートして、forEach()メソッドを使い、各プレイヤーの名前に対応するダメージ値を取得し、出力していることはなんとなくわかりますが、forEachの引数のnameが具体的に何を指しているのかがわかりません。
この質問に関しては、consoleやbreakpointで変数 name の値を確認すればすぐにわかることなので、自分で確認する癖をつけると良いと思いました。
console.log(name);