質問: a => a[0].map((_, c) => a.map(r => r[c])).reverse(); ```
回答: アンダーバーのみの変数の意味はお見込みの通り「単純に引数として書く必要があるため、記述はされたが特に使われていない」から**気にしないでOK**という意味です。 map関数は配列の要素を取得する関数ですが、2つ目の引数を省略しない場合は配列のインデックスを取得できます。 ``` const array1 = [1, 4, 9, 16]; const map1 = array1.map((_, i) => i * 2); // Array [0, 2, 4, 6] console.log(map1); ``` 1つ目の引数を省略することはできないので、質問文では仕方なく無意味な変数`_`を宣言しているものの`c`しか使っていません。 例えば使わない引数に`unused_local_variable`とでも変数名を付ければ分かりやすいかもしれませんが、明らかに冗長です。 それよりも上記コード2行目のように記述する方が、慎ましやかで目立たない変数になるとは思いませんか。 いつからそのような合意がとられたのかは存じ上げませんが、無意味な変数を`_`1文字にすることはjavascriptに限らずプログラミングの通例としてしばしば目にします。 本家SOの類似質問 特にGo言語を使用しているとアンダースコア1文字のみの変数名が頻出します。 Go言語は非常に厳格な言語なので使用しない変数を定義するとコンパイルエラーになります。 まさにmap関数のindexだけを使いたい場合や、関数から返ってくるエラー情報を使わない時に無理やり変数を使わないと実行できません。 それを回避する方法として、変数名を`_`とすることで「この戻り値は使いません」と明示すればコンパイル可能になります。 これはGo言語では`blank identifier`「日本語訳すると空白の識別子など」と定義されています。 蛇足ですが、`_`のみの変数を他で使わないことは暗黙のルールにすぎません。 そのため下記コードの2行目のように使用すること自体は可能です。 (もちろん紛らわしいので`_`変数は使用しない方が望ましいです) ``` const array2 = [1, 4, 9, 16]; const map2 = array2.map((_, i) => _ * 2); // _ は使用できる // Array [2, 8, 18, 32] console.log(map2); ```