12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【解説】二次元配列を転置(transpose)するJavaScriptワンライナー

Posted at

二次元配列を転置(transpose)するJavaScriptワンライナーをネットで見つけて使えることはすぐにわかったのですが、どのように動作するのかがすぐにわからなかったので解説を書いてみました。

参考

日本語記事
https://qiita.com/kznr_luk/items/790f1b154d1b6d4de398
↑の元ネタ
https://stackoverflow.com/questions/17428587/transposing-a-2d-array-in-javascript

ワンライナー

array[0].map((col, i) => array.map(row => row[i]));

解説

2つの部分に分けて考えるとわかりやすいです。

まず、置換の各列をループします。これが転置後二次元配列の各行になります。それが、

array[0].map((col, i) => ...));

の部分になります。
インデックス0の行を取り出してmapすることで各列のインデックス(変数iに入る)を使えるようにしています。forループを使うより短く書けますね。

それから、...の部分が実際に置換後の各行を作っているところです。それが、

array.map(row => row[i])

の部分です。

置換前の二次元配列の列を一次元配列にして返します。
たとえば、i0の場合、array.map(row => row[0])となり、これはもとの二次元配列の1列目を返します。

これをすべての列に対して行いくっつければ転置した二次元配列の完成です。

まとめると、

array[0].map((col, i) =>       // 二次元配列の各列をループして、
    array.map(row => row[i])   // 各列を取り出して一次元配列にして、
);                             // くっつける。

となります。

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?