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