2017-10-19 225 views
0

我有一个JSON版本DOM树的,我想只保留页面之间的差异(除去导航页脚...)保持唯一的区别两者之间的JSON

例子:

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

而且

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

与函数

diff(a, b) 

这个结果

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

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

我创造了这个基于递归函数

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

    } 

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

我该怎么办呢?是否有npm包装?或用JSON路径?我想创建一个功能,删除相同的'部分'之间的两个JSON文件与具有相同结构的功能的输出,但没有'等分部分'唯一的区别。

+0

这不是JSON。 JSON是用于数据交换的*文本符号。 [(More here。)](http://stackoverflow.com/a/2904181/157247)如果你正在处理JavaScript源代码,而不是处理*字符串*,那么你并没有处理JSON。 –

回答

0

你可以做一点不同,这应该给你正确的价值观。

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; 
}; 

看到这里的代码与示例数据https://jsbin.com/toboto/edit?js,console

该解决方案是不是递归虽然。或者,对于深度差异,我建议查看此库https://github.com/flitbit/diff