Dans le travail de programmation quotidien, juger si deux JSON sont égaux est un problème très courant. En JavaScript, nous pouvons déterminer si deux JSON sont égaux en comparant les valeurs des propriétés dans les objets JSON. Cet article abordera plusieurs façons de déterminer si deux JSON sont égaux en JavaScript, notamment des comparaisons approfondies et des comparaisons superficielles.
1. Comparaison superficielle
La comparaison superficielle est une méthode relativement basique, généralement utilisée pour déterminer si les attributs de deux objets JSON sont égaux. Les comparaisons superficielles comparent uniquement les propriétés de niveau supérieur d'un objet JSON et ne comparent pas de manière récursive les propriétés imbriquées des objets.
Ce qui suit est un exemple de code qui utilise une méthode de comparaison superficielle pour déterminer si deux JSON sont égaux :
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
Dans l'exemple de code ci-dessus, nous définissons une fonction nommée ShallowEqual, qui accepte deux paramètres obj1 et obj2 , utilisée pour comparer si les deux JSON sont égaux. La fonction utilise d'abord la méthode Object.keys() pour obtenir les listes de noms d'attribut de obj1 et obj2, puis compare les deux listes pour vérifier leur égalité. Si ce n'est pas égal, la fonction renvoie false, sinon parcourt chaque attribut de obj1 et compare si sa valeur est égale à la valeur de l'attribut correspondant dans obj2. Si l'une des valeurs n'est pas égale, la fonction renvoie faux, sinon elle renvoie vrai.
2. Comparaison approfondie
La comparaison approfondie est une méthode plus complexe, qui est utilisée pour comparer si tous les attributs de deux objets JSON sont égaux, y compris les attributs imbriqués des objets. Lorsque nous utilisons la méthode de comparaison approfondie, nous devons parcourir de manière récursive toutes les propriétés de l'objet JSON et comparer si leurs valeurs sont égales.
Ce qui suit est un exemple de code qui utilise la méthode de comparaison approfondie pour déterminer si deux JSON sont égaux :
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
Dans l'exemple de code ci-dessus, nous définissons une fonction nommée deepEqual, qui accepte deux paramètres obj1 et obj2, utilisée pour comparer si deux JSON sont égaux. Cette fonction détermine d'abord si obj1 et obj2 sont exactement égaux et si c'est le cas, renvoie vrai. Ensuite, il vérifie si obj1 et obj2 sont du même type et renvoie false sinon. Il vérifie ensuite si obj1 et obj2 sont de type tableau ou de type objet et renvoie false si l'un est de type tableau et l'autre de type objet. Si les deux objets JSON sont de type objet, utilisez la méthode Object.keys() pour obtenir une liste de leurs noms de propriété et comparez les deux listes pour vérifier leur égalité. Ensuite, la fonction deepEqual est appelée de manière récursive pour chaque attribut de obj1 afin de comparer si les valeurs des attributs correspondants dans obj1 et obj2 sont égales. Si les valeurs de l'une des propriétés ne sont pas égales, la fonction renvoie faux, sinon elle renvoie vrai.
Conclusion
Déterminer si deux JSON sont égaux en JavaScript est une opération très utile. Il existe de nombreuses façons de résoudre ce problème, que ce soit en utilisant des comparaisons superficielles ou des comparaisons approfondies. Si vous avez uniquement besoin de comparer les propriétés de niveau supérieur d'un objet JSON, utilisez des méthodes de comparaison superficielles. Si vous devez comparer toutes les propriétés d'un objet JSON, y compris les propriétés imbriquées, utilisez la méthode de comparaison approfondie pour résoudre le problème. Quelle que soit la méthode que vous choisissez, n'oubliez pas de tester votre solution pour vous assurer qu'elle compare correctement deux objets JSON pour vérifier leur égalité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!