【JavaScript】配列のfilterは空オブジェクトを削除しない

こんにちは、フリーランスエンジニアの太田雅昭です。

JavaScript 空オブジェクトは真になる

JavaScriptは以下のような空オブジェクトを、真として扱います。

const blank = {};
console.log( blank ? "true" : "false" ); // true

// ちなみに他の場合
console.log( 1 ? "true" : "false" ); // true
console.log( 0 ? "true" : "false" ); // false
console.log( "" ? "true" : "false" ); // false

filterをかけても、真なので消えない

前述のこともあり、filterでそのまましても消えません。

const arr = [{}, 1, 0];
console.log(arr.filter(a=>a)); // [{}, 1];

キー判定を入れる

そこでキー判定を入れてみます。

const arr = [{}, 1, 0];
console.log(
  arr.filter(a => Object.keys(a).length > 0)
); // []

全部消えてしまいましたが、これはオブジェクト以外のキーが0個のためです。

何はともあれ、用途によってはこうした方法も使えそうですね。

小話

家の近くで工事をやっているのですが、家が若干揺れてインターネットが繋がらなくなるということがありました。いやいや、どれだけ弱いねんうちのインターネットは。

ではでは。