mapで特定要素を除外したいときとか
たとえば [2, 1, 0, -1, -2] みたいなデータがあって
var N = 1000; var a = [2, 1, 0, -1, -2]; var b = a.map ( function (n) { return N / n; } );
みたいなことがしたいんだけど、入力データ列が特定の値のときは出力から除外したい。
というのがわりとある。そのときだけnullをかえすとかして、あとでfilterして外してる。
var N = 1000; var a = [2, 1, 0, -1, -2]; var b = a.map ( function (n) { return n ? N / n : null; } ).filter ( function ( n ) { n != null }) ; b; // [500, 1000, -1000, -500]
こういうのって、もっとスマートに書けたりするんでしょうか。
めんどくさいからこういうときだけforでふつうにループまわして配列にpushしてたりするんです。
perlだと
grep {$_} map { $_ ? $N/$_ : undef } @_;
って書くの? うーんfunctionとreturnと引数省略できるからわりとスマート.... filterの書き方がめんどいせいなのかな。でもnullも正しいリストの値として返したいけど、その他の条件で除外したいときがある、みたいなのだとお手上げになるので、いい方法がないのかなーと思ってます。