J'ai deux objets: oldObj
et newObj
.
Les données en oldObj
a été utilisé pour remplir un formulaire et l' newObj
est le résultat de l'utilisateur modifie les données de ce formulaire et de le soumettre.
Les deux objets sont profonds, c'est à dire. ils ont des propriétés qui sont des objets ou des tableaux d'objets, etc - ils peuvent être n niveaux de profondeur, donc l'algorithme de comparaison doit être récursive.
Maintenant, j'ai besoin non pas seulement de comprendre ce qui a changé (comme dans ajout/mise à jour/suppression) d' oldObj
de newObj
, mais aussi à la meilleure manière de le représenter.
Pour l'instant, mes pensées était de construire un genericDeepDiffBetweenObjects
méthode qui retourne un objet de la forme {add:{...},upd:{...},del:{...}}
mais ensuite j'ai pensé: quelqu'un d'autre doit avoir besoin de cette avant.
Alors... personne ne sait d'une bibliothèque ou d'un morceau de code qui va le faire et peut-être avoir une meilleure façon de représenter la différence (qui est encore JSON serializable)?
Mise à jour:
J'ai pensé une meilleure façon de représenter les données mises à jour, en utilisant la même structure de l'objet en tant que newObj
, mais de tourner toutes les valeurs de propriété dans les objets sur le formulaire:
{type: '<update|create|delete>', data: <propertyValue>}
Donc, si newObj.prop1 = 'new value'
et oldObj.prop1 = 'old value'
ce serait, returnObj.prop1 = {type: 'update', data: 'new value'}
Mise à jour 2:
Il devient vraiment poilue quand nous arrivons à des propriétés qui sont des tableaux, depuis le tableau [1,2,3]
devraient être considérés comme des égaux [2,3,1]
, ce qui est assez simple pour les tableaux de la base de la valeur de type string, int & bool, mais devient vraiment difficile à gérer quand il s'agit de tableaux de référence des types comme les objets et les tableaux.
Exemple de tableaux qui devrait être trouvé à l'égalité:
[1,[{c: 1},2,3],{a:'hey'}] and [{a:'hey'},1,[3,{c: 1},2]]
Non seulement, c'est assez complexe à vérifier pour ce type de valeur profonde de l'égalité, mais aussi de trouver une bonne façon de représenter les modifications qui pourraient être.