ホームページ >ウェブフロントエンド >フロントエンドQ&A >JavaScript で 2 つの JSON が等しいかどうかを判断する方法

JavaScript で 2 つの JSON が等しいかどうかを判断する方法

PHPz
PHPzオリジナル
2023-04-21 09:13:573685ブラウズ

日常のプログラミング作業において、2 つの JSON が等しいかどうかを判断することは非常に一般的な問題です。 JavaScript では、JSON オブジェクトのプロパティ値を比較することで、2 つの JSON が等しいかどうかを判断できます。この記事では、深い比較と浅い比較を含め、JavaScript で 2 つの JSON が等しいかどうかを判断するいくつかの方法について説明します。

1. 浅い比較

浅い比較は比較的基本的な方法で、通常は 2 つの JSON オブジェクトの属性が等しいかどうかを判断するために使用されます。浅い比較では、JSON オブジェクトの最上位プロパティのみが比較され、オブジェクトのネストされたプロパティは再帰的に比較されません。

以下は、浅い比較メソッドを使用して 2 つの JSON が等しいかどうかを判断するサンプル コードです:

function shallowEqual(obj1, obj2) {
  const keys1 = Object.keys(obj1);
  const keys2 = Object.keys(obj2);

  if (keys1.length !== keys2.length) {
    return false;
  }

  for (let i = 0; i < keys1.length; i++) {
    const key = keys1[i];
    if (obj1[key] !== obj2[key]) {
      return false;
    }
  }

  return true;
}

const obj1 = { a: 1, b: "hello", c: true };
const obj2 = { a: 1, b: "world", c: true };

console.log(shallowEqual(obj1, obj2)); // false
console.log(shallowEqual(obj1, obj1)); // true

上記のサンプル コードでは、shallowEqual という名前の関数を定義します。 2 つのパラメータ obj1 と obj2。2 つの JSON が等しいかどうかを比較するために使用されます。この関数は、まず Object.keys() メソッドを使用して obj1 と obj2 の属性名のリストを取得し、次に 2 つのリストが等しいかどうかを比較します。等しくない場合、関数は false を返します。そうでない場合は、obj1 の各属性を反復処理して、その値が obj2 の対応する属性の値と等しいかどうかを比較します。いずれかの値が等しくない場合、関数は false を返し、そうでない場合は true を返します。

2. 深い比較

深い比較はより複雑な方法で、2 つの JSON オブジェクトのすべての属性 (オブジェクトのネストされた属性を含む) が等しいかどうかを比較するために使用されます。詳細な比較方法を使用する場合、JSON オブジェクトのすべてのプロパティを再帰的に走査し、それらの値が等しいかどうかを比較する必要があります。

以下は、深い比較メソッドを使用して 2 つの JSON が等しいかどうかを判断するサンプル コードです:

function deepEqual(obj1, obj2) {
  if (obj1 === obj2) {
    return true;
  }

  if (typeof obj1 !== typeof obj2) {
    return false;
  }

  if (Array.isArray(obj1) !== Array.isArray(obj2)) {
    return false;
  }

  if (typeof obj1 === "object" && obj1 !== null && obj2 !== null) {
    const keys1 = Object.keys(obj1);
    const keys2 = Object.keys(obj2);

    if (keys1.length !== keys2.length) {
      return false;
    }

    for (const key of keys1) {
      if (!obj2.hasOwnProperty(key)) {
        return false;
      }

      if (!deepEqual(obj1[key], obj2[key])) {
        return false;
      }
    }

    return true;
  }

  return obj1 === obj2;
}

const obj1 = { a: 1, b: ["foo", "bar"], c: { d: true } };
const obj2 = { a: 1, b: ["foo", "bar"], c: { d: true } };
const obj3 = { a: 1, b: ["foo", "bar"], c: { d: false } };

console.log(deepEqual(obj1, obj2)); // true
console.log(deepEqual(obj1, obj3)); // false

上記のサンプル コードでは、2 つのパラメーターを受け入れる deepEqual という名前の関数を定義します。 obj1 と obj2。2 つの JSON が等しいかどうかを比較するために使用されます。この関数は、まず obj1 と obj2 が正確に等しいかどうかを判断し、等しい場合は true を返します。次に、obj1 と obj2 が同じ型であるかどうかを確認し、そうでない場合は false を返します。次に、obj1 と obj2 の両方が配列型であるかオブジェクト型であるかを確認し、一方が配列型で、もう一方がオブジェクト型である場合は false を返します。両方の JSON オブジェクトがオブジェクト型である場合は、Object.keys() メソッドを使用してプロパティ名のリストを取得し、2 つのリストが等しいかどうかを比較します。次に、obj1 の各属性に対して deepEqual 関数が再帰的に呼び出され、obj1 と obj2 の対応する属性の値が等しいかどうかを比較します。いずれかのプロパティの値が等しくない場合、関数は false を返し、そうでない場合は true を返します。

結論

JavaScript で 2 つの JSON が等しいかどうかを判断することは、非常に便利な操作です。浅い比較を使用するか深い比較を使用するかに関係なく、この問題を解決する方法は数多くあります。 JSON オブジェクトの最上位プロパティのみを比較する必要がある場合は、浅い比較メソッドを使用します。ネストされたプロパティを含む JSON オブジェクトのすべてのプロパティを比較する必要がある場合は、詳細比較メソッドを使用して問題を解決します。どちらの方法を選択する場合でも、必ずソリューションをテストして、2 つの JSON オブジェクトが等しいかどうか正しく比較されることを確認してください。

以上がJavaScript で 2 つの JSON が等しいかどうかを判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。