Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象深度/嵌套子级比较_Javascript - Fatal编程技术网

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对象”。