JavaScriptでオブジェクトから空のオブジェクトをすべて削除する方法
JavaScriptでは、ネストされたオブジェクトの中に含まれる「空のオブジェクト(プロパティがひとつもないオブジェクト)」を再帰的に削除したいケースがあります。本記事では、forEach()、typeof、delete を組み合わせて、すべての空のオブジェクトを取り除く方法を解説します。
対象となるオブジェクトの例
たとえば、次のようなオブジェクトがあるとします。
const details =
{
name: 'John',
age: {},
marks: { marks: {} }
}このオブジェクトには age: {} や marks: { marks: {} } のように、中身が空になっているオブジェクトが含まれています。これらをすべて削除し、最終的に { name: 'John' } の状態にするのがゴールです。
実装コード
以下がそのサンプルコードです。関数内で自分自身を再帰的に呼び出すことで、ネストされた階層の空オブジェクトまでチェックできます。
const details =
{
name: 'John',
age: {},
marks: { marks: {} }
}
function removeAllBlankObjects(detailsObj) {
Object.keys(detailsObj).forEach(k => {
if (detailsObj[k] && typeof detailsObj[k] === 'object' && removeAllBlankObjects(detailsObj[k]) === null) {
delete detailsObj[k];
}
});
if (!Object.keys(detailsObj).length) {
return null;
}
}
removeAllBlankObjects(details);
console.log(details);コードの仕組み
この関数の処理の流れは以下のとおりです。
Object.keys()でオブジェクトのすべてのキーを取得し、forEach()で各キーを順に処理します。- 値が存在し(nullやundefinedでなく)、
typeofの結果が'object'である場合、その値に対して再帰的に同じ関数を呼び出します。 - 再帰呼び出しの戻り値が
null(=そのオブジェクトが空になった)場合、delete演算子でそのキーを削除します。 - 最後に、オブジェクトのキーがひとつも残っていなければ
nullを返すことで、親階層でも削除判定ができるようになります。
プログラムの実行方法
上記のプログラムを実行するには、Node.js環境で次のコマンドを使用します。
node fileName.js
ここでは、ファイル名を demo283.js として保存したものとしています。
実行結果
コンソールには次のような出力が表示されます。
PS C:\Users\Amit\javascript-code> node demo283.js
{ name: 'John' }このように、空だった age プロパティと marks プロパティが削除され、値を持つ name のみが残っていることが確認できます。
注意点
- この関数は元のオブジェクトを直接変更する(破壊的な)処理です。元のデータを保持したい場合は、あらかじめディープコピーを作成しておきましょう。
- 配列や
Dateなどの特殊なオブジェクトもtypeofでは'object'として判定されるため、用途によっては型チェックを追加することをおすすめします。
-
JavaScript関数からオブジェクトを返す方法をわかりやすく解説
JavaScriptの関数からオブジェクトを返すには、return文を使用します。オブジェクト内のプロパティやメソッドにアクセスする際は、thisキーワードを活用すると便利です。この記事では、実際のコード例を使いながら、JavaScript関数からオブジェクトを返す基本的な方法を解説します。基本的な考え方JavaScriptでは、オブジェクトの中にメソッド(関数)を定義できます。そのメソッド内でreturn文を使えば、処理結果や値を呼び出し元に返すことができます。また、thisキーワードを参照することで、同じオブジェクト内の他のプロパティにアクセス可能です。サンプルコード以下のコードでは、従業
-
JavaScriptオブジェクトからプロパティを削除する方法|delete演算子の使い方
JavaScriptのオブジェクトからプロパティを削除するには、delete演算子を使用します。delete演算子を使うと、指定したプロパティがオブジェクトから完全に取り除かれます。なお、単にプロパティに undefined を代入した場合と異なり、delete演算子を使えばプロパティそのものをオブジェクトから削除できる点に注意してください。サンプルコード<!DOCTYPE html> <html> <body> <h1>JavaScript Object Properties Example</h1> <h2 class=&q