JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript】オブジェクトが配列内のすべてのキーを含んでいるか判定する方法

containsAll() 関数とは

本記事では、2つの引数を受け取る関数 containsAll() を作成します。第一引数にはオブジェクト、第二引数には文字列の配列を渡します。この関数は、オブジェクトが配列内で文字列として指定されたすべてのプロパティ(キー)を持っているかどうかに応じて、ブール値(true / false)を返します。

実装の考え方

実装のアプローチはシンプルです。配列を反復処理しながら、各要素がオブジェクトのキーとして存在するかどうかを順番にチェックしていきます。もし配列内の文字列がオブジェクトのキーとして見つからなければ、その時点で処理を中断して false を返します。すべての要素が存在することが確認できれば、true を返します。

サンプルコード

const obj = {
  'name': 'Ashish Kumar',
  'dob': '12/07/1991',
  'gen': 'M',
  'isEmployed': true,
  'jobType': 'full-time'
};
const obj2 = {
  'name': 'Ashish Kumar',
  'dob': '12/07/1991',
  'gen': 'M',
  'jobType': 'full-time'
};
const arr = ['dob', 'name', 'gen', 'isEmployed', 'jobType'];
const containsAll = (obj, arr) => {
  for(const str of arr){
    if(Object.keys(obj).includes(str)){
      continue;
    }else{
      return false;
    }
  }
  return true;
};
console.log(containsAll(obj, arr));
console.log(containsAll(obj2, arr));

出力結果

上記のコードをコンソールで実行すると、次の出力が得られます。

true
false

1つ目のオブジェクト obj は、配列 arr のすべてのキー(dob、name、gen、isEmployed、jobType)を持っているため true が返されます。一方、obj2 には isEmployed プロパティが存在しないため、false が返されます。

コードの解説

この関数で使われている主な要素は以下のとおりです。

  • Object.keys(obj):オブジェクトが持つすべてのキーを文字列の配列として取得します。
  • .includes(str):取得したキーの配列に、対象の文字列が含まれているかどうかを判定します。
  • for...of ループ:配列 arr の各要素を順番に取り出してチェックします。

より簡潔な書き方:every() を使う

ES2015 以降で利用できる Array.prototype.every() を使えば、同じ処理を1行で表現することも可能です。

const containsAll = (obj, arr) => arr.every(key => key in obj);

every() は、配列のすべての要素がコールバック関数の条件を満たす場合にのみ true を返すメソッドです。そのため、for ループを使った実装とまったく同じ動作になります。また、in 演算子を使うことで、キーの存在確認をより直感的に記述できます。用途に応じて、読みやすい方を選択するとよいでしょう。

  1. JavaScriptでオブジェクトを新しい配列に変換する方法

    JavaScriptでは、オブジェクトのプロパティやネストされたデータを取り出し、扱いやすい形で新しい配列にフォーマットできます。本記事では、学校(school)オブジェクトに含まれる生徒情報を、文字列形式の配列へ変換する実践的なコード例を紹介します。 ポイントとなるテクニック このサンプルでは、以下の2つのJavaScript機能を活用しています。 分割代入(Destructuring assignment):オブジェクトから特定のプロパティを簡潔に取り出す構文です。 for...of ループ:配列内の各要素を順番に処理するために使用します。 コード例 <!DOCTYPE html

  2. JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説

    JavaScriptにおいて、Array.map()は配列の各要素に関数を適用し、その結果を新しい配列として返すメソッドです。一方、オブジェクトには直接map()メソッドが用意されていないため、Object.keys().map()という形で、まずObject.keys()を使ってオブジェクトのキーを配列として取得し、そこにmap()を適用するのが一般的なテクニックとなります。 この記事では、両者の使い方の違いを、実際に動作するサンプルコードと実行結果をもとにわかりやすく解説します。 サンプルコード 以下は、Object.keys().map()とArray.map()の動作を比較できるJa