• ベストアンサー

配列の転置をエレガント(?)に行いたい

初めて質問します。よろしくお願いします。 配列を転置する関数Aを書いてみました。 関数Cがイマイチな気がして眠れません。 アドバイスをお願いします。 function C (a, b, c) {  a[c] = (a[c] || []).concat (b);  return a; } function B (a, b, c) {  return b.reduce (C, a); } function A (ary) {  return ary.reduce (B, []); }

質問者が選んだベストアンサー

  • ベストアンサー
  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.1

mapを使いましょう。 function A(ary) { return ary.map( (a, i) => a.map( (v, j) => ary[j][i] ) ) }

babu_baboo
質問者

お礼

関数のアロー記法というのですね。 展開して function A (ary) {  return ary.map (   function (a, i) {    return a.map (     function (v, j) {      return ary[j][i];     };    );   }  ); } 関数Aの中に関数Bが、その中に関数C。 つまらない拘りなのですが、関数A、B、Cは独立させたい。 function C (v, j) {  return this.ary[j][this.i]; } function B (a, i) {  return a.map (C, {ary: this, i: i}); } function A (ary) {  return ary.map (B, ary); } エレガントに近づけてます?

babu_baboo
質問者

補足

回答ありがとうございます。 あれからすぐに爆睡していました。 今は、何がなんだか判りません。(要ヒント!) 精進します。