human
Je veux comparer 2 tableaux d'objets dans du code JavaScript. Les objets ont un total de 8 propriétés, mais chaque objet n'aura pas une valeur pour chacune, et les tableaux ne seront jamais plus grands que 8 éléments chacun, donc peut-être que la méthode brute de traverser chaque élément puis de regarder les valeurs des 8 propriétés est la façon la plus facile de faire ce que je veux faire, mais avant de mettre en œuvre, je voulais voir si quelqu'un avait une solution plus élégante. Des idées
gpt
Comme la sérialisation ne fonctionne généralement pas (seulement lorsque l'ordre des propriétés correspond: ```JSON.stringify({a:1,b:2}) !== JSON.stringify({b:2,a:1})```), vous devez vérifier le nombre de propriétés et comparer chaque propriété également:

```const objectsEqual = (o1, o2) =>
    Object.keys(o1).length === Object.keys(o2).length
        && Object.keys(o1).every(p => o1[p] === o2[p]);
const obj1 = { name: 'John', age: 33};
const obj2 = { age: 33, name: 'John' };
const obj3 = { name: 'John', age: 45 };
console.log(objectsEqual(obj1, obj2)); // true
console.log(objectsEqual(obj1, obj3)); // false```

Si vous avez besoin d'une comparaison approfondie, vous pouvez appeler la fonction de manière récursive:

```const obj1 = { name: 'John', age: 33, info: { married: true, hobbies: ['sport', 'art'] } };
const obj2 = { age: 33, name: 'John', info: { hobbies: ['sport', 'art'], married: true } };
const obj3 = { name: 'John', age: 33 };
const objectsEqual = (o1, o2) =>
    typeof o1 === 'object' && Object.keys(o1).length > 0
        ? Object.keys(o1).length === Object.keys(o2).length
            && Object.keys(o1).every(p => objectsEqual(o1[p], o2[p]))
        : o1 === o2;
console.log(objectsEqual(obj1, obj2)); // true
console.log(objectsEqual(obj1, obj3)); // false```

Ensuite, il est facile d'utiliser cette fonction pour comparer des objets dans des tableaux:
```const arr1 = [obj1, obj1];
const arr2 = [obj1, obj2];
const arr3 = [obj1, obj3];
const arraysEqual = (a1, a2) =>
   a1.length === a2.length && a1.every((o, idx) => objectsEqual(o, a2[idx]));
console.log(arraysEqual(arr1, arr2)); // true
console.log(arraysEqual(arr1, arr3)); // false
```