2017-10-19 7 views
0

J'ai une version JSON d'un arbre DOM et je veux garder que la différence entre les pages (remove pied de page nav ...)Gardez seule différence entre deux JSON

Exemple:

const a = { 
    id: '1', 
    child: [ 
     { 
      id: '2', 
      child: [{id: '1'}, {id: '2'}] 
     }, 
     { 
      id: '3', 
      child: [{id: '1'}, {id: '5'}] 
     } 
    ] 
}; 

Et

const b = { 
    id: '1', 
    child: [ 
     { 
      id: '2', 
      child: [{id: '1'}, {id: '4'}] 
     }, 
     { 
      id: '3', 
      child: [{id: '1'}, {id: '4'}] 
     } 
    ] 
}; 

Avec une fonction

diff(a, b) 

Ce résultat

{ 
    id: '1', 
    child: [ 
     { 
      id: '2', 
      child: [{id: '2'}] 

     }, 
     { 
      id: '3', 
      child: [{id: '5'}] 
     } 
    ] 
} 

J'ai créé cette base de la fonction récursive

const diff = (a, b) => { 
    if (Array.isArray(a)) { 

    } 

    if (typeof a === 'object') { 
    // ... 
    extract(a.child, b.child); 
    } 
} 

Comment puis-je faire? Y a-t-il un paquet npm? ou avec JSON Chemin? Je veux créer une fonction qui supprime l'égalité 'parties' entre deux fichiers JSON avec la sortie de la fonction ayant la même structure, mais sans la différence 'parts égales' seulement.

+0

Ce n'est pas JSON. JSON est une * notation textuelle * pour l'échange de données. [(Plus ici.)] (Http://stackoverflow.com/a/2904181/157247) Si vous traitez avec du code source JavaScript, et non avec une * chaîne *, vous n'avez pas affaire à JSON. –

Répondre

0

Vous pouvez le faire un peu différemment, cela devrait vous donner les bonnes valeurs.

function diff(obj1, obj2) { 
    var ret = {}; 
    for(var i in obj2) { 
    if(!obj1.hasOwnProperty(i) || obj2[i] !== obj1[i]) { 
     ret[i] = obj2[i]; 
    } 
    } 
    return ret; 
}; 

voir le code ici avec vos données d'exemple https://jsbin.com/toboto/edit?js,console

Cette solution est récursive bien. Alternativement, pour une différence profonde, je recommande de vérifier cette bibliothèque https://github.com/flitbit/diff