JavaScriptでオブジェクトの値が空の場合にキー名を取得する方法
JavaScriptでオブジェクトを扱っていると、「値が空文字列やnullになっているプロパティのキー名を知りたい」という場面に出会うことがあります。例えば、フォーム入力のバリデーションやデータの整合性チェックなどがその典型例です。
このような場合は、Object.keys()メソッドとfind()メソッドを組み合わせることで、簡潔にキー名を取得できます。
対象となるオブジェクトの例
まず、次のようなオブジェクトを用意します。
var details = {
firstName: 'John',
lastName: '',
countryName: 'US'
}このオブジェクトでは、lastNameの値が空文字列''になっています。このキー名をプログラムで検出してみましょう。
Object.keys()とfind()を使った実装方法
Object.keys(details)は、オブジェクトのすべてのキーを配列として返します。そこに対してfind()を適用し、「値が空文字列またはnullであるキー」を条件として検索します。
サンプルコード
var details = {
firstName: 'John',
lastName: '',
countryName: 'US'
}
var result = Object.keys(details).find(key =>
(details[key] === '' || details[key] === null)
);
console.log("The key is=" + result);コードのポイント
Object.keys(details):['firstName', 'lastName', 'countryName']という配列を返します。find(key => ...): 条件を満たす最初の要素だけを返します。該当するキーが複数あっても最初の1つのみです。details[key] === '': 値が空文字列であるかを厳密等価演算子で判定しています。details[key] === null: 値がnullであるかも同時にチェックしているため、より実用的な検証になります。
プログラムの実行方法
上記のコードをファイルに保存し、Node.jsで次のコマンドを実行します。
node fileName.js
実行結果
ここではファイル名をdemo118.jsとして保存した場合の出力例です。
PS C:\Users\Amit\JavaScript-code> node demo118.js The key is=lastName
値が空になっているlastNameが正しく検出され、キー名が出力されていることが確認できます。
補足:複数の空キーや未定義値にも対応したい場合
find()は最初に一致した1件しか返さないため、空の値を持つキーが複数存在する可能性がある場合はfilter()を使うと便利です。また、undefinedもチェック対象に加えることで、より堅牢な検証が可能になります。
// 空の値を持つすべてのキーを取得する例
var emptyKeys = Object.keys(details).filter(key =>
details[key] === '' || details[key] === null || details[key] === undefined
);
console.log(emptyKeys);このように、Object.keys()と配列メソッドを組み合わせれば、オブジェクト内の空データを柔軟にチェックできます。入力チェックやAPIレスポンスの検証など、実務でも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。
-
【JavaScript】文字列キー(name)をもとに2つの配列を比較する方法
はじめに JavaScriptでは、オブジェクトが格納された2つの配列を、特定のキー(プロパティ)の値に基づいて比較したい場面がよくあります。オブジェクトは参照先が異なるため直接比較できない点に注意が必要です。本記事では、map()メソッドとincludes()メソッドを組み合わせて、「name」という文字列キーを持つ2つの配列から共通する要素を抽出する方法を解説します。 サンプルデータ まず、比較対象となる1つ目の配列は以下のとおりです。 const firstArray = [ { name: John Doe }, { name: John Smith }, {
-
JavaScriptでオブジェクトを値の昇順に並べ替える方法をわかりやすく解説
問題の概要次のようなオブジェクトがあるとします。const obj = { sub1: 56, sub2: 67, sub3: 98, sub4: 54, sub5: 87};ここで求められているのは、このようなオブジェクトを引数として受け取るJavaScript関数を作成することです。作成する関数は、オブジェクト内の各キーに対応する値(バリュー)の昇順に基づいてオブ