Javascript 对象深度/嵌套子级比较
我有两个对象,我想列出这两个对象之间的更改,如下所述: 目前我得到以下输出Javascript 对象深度/嵌套子级比较,javascript,Javascript,我有两个对象,我想列出这两个对象之间的更改,如下所述: 目前我得到以下输出 当前值|新值 标题:对象1|标题:对象1已更新 说明:对象1说明|说明:对象1说明已更新 目前,我的代码用于根级别比较(如上所述)。但我正在寻找关于深层/嵌套子级差异的比较 我的输出应该如下所示 当前值|新值 标题:对象1|标题:对象1已更新 说明:对象1说明|说明:对象1说明已更新 relations.tools[0]。标题:我的第一个工具|relations.tools[0]。标题:我的第一个工具已更新 关系。工具[
当前值|新值
标题:对象1|标题:对象1已更新
说明:对象1说明|说明:对象1说明已更新
目前,我的代码用于根级别比较(如上所述)。但我正在寻找关于深层/嵌套子级差异的比较 我的输出应该如下所示 当前值|新值
标题:对象1|标题:对象1已更新
说明:对象1说明|说明:对象1说明已更新
relations.tools[0]。标题:我的第一个工具|relations.tools[0]。标题:我的第一个工具已更新
关系。工具[0]。类型[1]。名称:test2|已删除
关系。培训[0]。说明:培训说明| |关系。培训[0]。说明:培训说明已更新
relations.training[0]。trainingTypes[1]。姓名:亲自| |已删除 我的当前代码
function diffObjects(obj1, obj2) {
let res = [];
let objKeysArray = _.keys(obj2) || [];
if (!obj1 || !obj2) {
return res;
}
if (objKeysArray.length === 0) {
return res;
}
_(objKeysArray).forEach((key) => {
console.log(obj1[key], obj2[key]);
if (_.isArray(obj1[key]) && _.isArray(obj2[key])) {
} else if (_.isObject(obj1[key]) && _.isObject(obj2[key])) {
} else if (!_.isEqual(obj1[key], obj2[key])) {
let change1 = `${key} : ${obj1[key]}`;
let change2 = `${key} : ${obj2[key]}`;
res.push({
currentVal: change1,
newVal: change2
});
}
});
return _.flattenDeep(res);
}
我在这里为上述代码创建了一个提琴:
JSIDLE链接:
我已经引用了这些帖子:但他们只给我真实或错误的结果,而不是我所寻找的差异 我用ECMAScript 6语法为您制作了一个工作叉 这里还有一个嵌入式版本:
(函数(){
"严格使用",;
功能diffObj(obj1、obj2、ref){
变量前缀=ref | |“”;
var-res=[];
如果(!.isUndefined(obj1)和&&.isUndefined(obj2)){
再推({
currentVal:prefix+':'+JSON.stringify(obj1),
newVal:“已删除”
});
}else if(u.isUndefined(obj1)和&!u.isUndefined(obj2)){
再推({
currentVal:'已删除',
newVal:prefix+':'+JSON.stringify(obj2)
});
}
如果(u.isUndefined(obj1)| | u.isUndefined(obj2)){
返回深度(res);
}
var keys=.uniq(.keys(obj1).concat(.keys(obj2));
_(键)。forEach(功能(键){
var value1=obj1[键];
var value2=obj2[键];
如果(!\u.isUndefined(值1)和&\u.isUndefined(值2)){
再推({
currentVal:前缀+键+':'+值1,
newVal:“已删除”
});
}如果(u.isUndefined(value1)和&&!u.isUndefined(value2)){
再推({
currentVal:'已删除',
newVal:前缀+键+':'+值2
});
}否则如果(u.isArray(值1)和&&u.isArray(值2)){
var条目=数学最大值(value1.length,value2.length);
对于(变量i=0;itbody')。追加(res);
})();代码>
现在的
新的
没有所谓的“JSON对象”。我猜你指的是“JavaScript对象”。