JavaScript(Lodash)-两个对象的深度比较

假设我有两个深层物体:

var oldData = {
  "id": 1,
  "first_name": "Eric",
  "last_name": "Henry",
  "info": {
    "email": "[email protected]",
    "gender": "Male",
    "ip_address": "7.11.169.150",
    "age": 11
  }
};

var newData = {
  "id": 2,
  "first_name": "Tommy",
  "last_name": "Henry",
  "info": {
    "email": "[email protected]",
    "gender": "Male",
    "ip_address": "7.11.169.150",
    "age": 15
  }
};

我将如何使用lodash(或JavaScript)遍历每个对象并获取每个不同值的值,因此在大写情况下

[
   {old: 1, new: 2},
   {old: 'Eric', new: 'Tommy'},
   {old: '[email protected]', new: '[email protected]'},
   {old: 11, new: 15},
]

这是我到目前为止的内容:

var oldData = {
  "id": 1,
  "first_name": "Eric",
  "last_name": "Henry",
  "info": {
    "email": "[email protected]",
    "gender": "Male",
    "ip_address": "7.11.169.150",
    "age": 11
  }
};

var newData = {
  "id": 2,
  "first_name": "Tommy",
  "last_name": "Henry",
  "info": {
    "email": "[email protected]",
    "gender": "Male",
    "ip_address": "7.11.169.150",
    "age": 15
  }
};

var diffObj = _.difference(_.keys(oldData), _.keys(newData));

console.log(JSON.stringify(diffObj, null, 4));
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

罗曼·佩列赫雷斯特

使用自定义递归函数compareUserDataObject.keys()函数的解决方案

var oldData = { "id": 1, "first_name": "Eric", "last_name": "Henry", "info": { "email": "[email protected]", "gender": "Male", "ip_address": "7.11.169.150", "age": 11 }
}; 
var newData = { "id": 2, "first_name": "Tommy", "last_name": "Henry", "info": { "email": "[email protected]", "gender": "Male", "ip_address": "7.11.169.150", "age": 15 }
};

function compareUserData(oldData, newData, result) {
    Object.keys(oldData).forEach(function (k) {
        if (typeof oldData[k] !== 'object') {
            if (oldData[k] != newData[k]) this.push({'old': oldData[k], 'new': newData[k]});
        } else {
            compareUserData(oldData[k], newData[k], this);
        }
    }, result);

    return result;
}

var result = compareUserData(oldData, newData, []);
console.log(result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

lodash:比较两个对象

比较两个javascript对象算法

如何使用Javascript或lodash对两个对象的属性进行浅层比较?

Javascript-Lodash / Underscore比较两个对象并根据其键更改值

Lodash / javascript:比较两个集合并返回差异

Javascript比较两个对象键生成新对象

如何使用lodash或javascript匹配两个对象?

对象数组中的Javascript / Lodash深度比较对象

比较javascript中的两个或多个对象键值对

比较两个对象数组并获得Javascript的区别

使用jQuery比较两个Javascript对象数组

如何从javascript比较对象的两个内部数组

如何在javascript中比较两个对象数组?

javascript比较两个对象并打印值

Javascript - 如何比较两个对象的数据属性?

比较值与两个javascript对象的最佳方法

比较javascript中的两个对象数组

如何比较javascript中的两个对象并获得差异?

如何用lodash比较两个对象并返回新对象?

如何使用lodash对2个对象进行深度比较?

lodash /下划线;比较两个对象并删除重复项

Lodash 4:如何比较两个对象键并返回差异?

lodash中是否有两个对象数组比较,如果结果相同则不会显示

通过比较javascript中的两个对象来对对象进行分类

如何在一个循环中迭代以比较 javascript 中的两个对象

用JavaScript比较两个日期

Javascript比较两个日期时间

javascript比较两个坐标对的位置

比较JavaScript中的两个日期