- ベストアンサー
配列の転置をエレガント(?)に行いたい
初めて質問します。よろしくお願いします。 配列を転置する関数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, []); }
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
mapを使いましょう。 function A(ary) { return ary.map( (a, i) => a.map( (v, j) => ary[j][i] ) ) }
お礼
関数のアロー記法というのですね。 展開して 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); } エレガントに近づけてます?
補足
回答ありがとうございます。 あれからすぐに爆睡していました。 今は、何がなんだか判りません。(要ヒント!) 精進します。