LoginSignup
0
0

More than 1 year has passed since last update.

htmlのテーブルをJavaScriptでTransposeする

Last updated at Posted at 2022-11-22

targetTable = $0; // 対象のテーブルElement

// 配列に詰め替えつつTransposeする
ar2 = [];
Array.from(targetTable.querySelectorAll('tr'), tr => 
  Array.from(tr.querySelectorAll('td,th'))).map((td, x) => {
    td.map((tr, y) => {
      ar2[y] ? 0 : ar2[y] = []; // eq) ar2[y] ??= [];
      ar2[y][x] = tr.cloneNode(true); // xyを逆にすることでtransposedになる
    });
  }
);

// 詰め替え済みの配列をテーブル化する
newT = document.createElement('table');
ar2.map(tr => {
  nr = document.createElement('tr');
  newT.appendChild(nr);
  tr.map(td => {
    nr.appendChild(td);
  });
});
targetTable.parentElement.appendChild(newT);
// targetTable.display='none';

余談

x ??= y というのを「Null合体代入」と言う(MDN)ようだ。

xがnullish(MDN)(null、undefined)のときだけ代入する。
配列の空要素(未代入)を指定して取得したときの値もundefinedになる(?)ためか、この場合も代入が動作する。
配列の空要素(k=[]; のときの k[0] とか、 t=Array(1); のときの t[0] とか。)の話、MDNには出てこないけどね。

こいつそもそも名前持ってないのかしら。不便なんだが。

これは配列の中で存在しない要素、すなわち以下の要素に対しては呼び出しません。
設定されたことがない添字
削除された要素
値を割り当てられたことがない要素

となってるやつなのだけども。

英語のMDNだと「visited」とか書いてやがる。ナンジャソリャ

"empty slots"だってさ

But in others (most notably array iteration methods), empty slots are skipped.

これか

0
0
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
0
0