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も正しいリストの値として返したいけど、その他の条件で除外したいときがある、みたいなのだとお手上げになるので、いい方法がないのかなーと思ってます。