Javascript プログラミング

Javascriptで配列の空要素を除去したいけど"0"は残したい時の.filter処理

"0"は空じゃないんだけどなー

Javascriptで空配列を除去したいときがあります。
ネットで検索すると

array.filter(v=>v);
array.filter(Boolean);

といった書き方が見つかります。

filterメソッドは引数として判定条件を書きます。

配列要素の中から条件に合ったものだけがフィルターを通過して、条件に合わない物はスキップされます。

例えば、v => v % 2 == 0 とか書くと偶数だけをとりだせます。

array.filter(v=>v); はreturnを省略せずに書くと return v; ですから、引数が true ならfilterを通過します。

array.filter(Boolean);はなんでBooleanと書くだけでいいのかよく分かりませんが、なんかスッキリした書き方で気に入っています。

大抵はこの二つで問題ないのですが、どちらも数字の"0"が除去されてしまうという欠点があります。数値のゼロは真偽値に直したとき false 扱いになるからだと思います。

私の場合は数値データが歯抜けだった時のエラー回避に使いたいので、0は残しておかないと困ります。

削除したいものを細かく指定する

そこで、filterの引数に無名関数を設定して配列を空だと判断する条件を自分で決めることにしました。

array.filter(function (x) {
  return x !== "" && x !== undefined && x !== null;
});

//アロー関数で書く
array.filter(x => x !== "" && x !== undefined && x !== null);

See the Pen filter study by Ryoji Kimura (@ryjkmr) on CodePen.

特に難しいことはなく、filterを通過させたい条件を && で結んでいるだけです。

""とundefinedとnullの違いが分かっていないのですが、とりあえず外したいモノを並べたら希望通りに0は残りました。

当たり前と言えば当たり前なんですけど、こんなのもメモっておかないと毎回忘れてしまうんですよね。

-Javascript, プログラミング