只保留两个JSON之间的差异

时间:2017-10-19 20:57:58

标签: javascript json node.js web-crawler

我有一个JSON版本的DOM树,我想只保留页面之间的差异(删除导航页脚...)

示例:

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文件之间相同的'部分',函数的输出具有相同的结构,但没有'相等部分'唯一的区别。

1 个答案:

答案 0 :(得分: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