lodash - Lodash 4:如何比较两个对象键并返回差异?
问题描述
我有两个像这样的对象:
originalObj
:
{
name: "Jane",
fullName: "Jane Doe"
nickname: "Janey"
...etc...
}
updatedObj
:
{
name: "Jane",
fullName: "Jane Dawn", //<--this value changed
nickname: "Janey"
...etc..
}
使用 lodash 4,我如何比较两个对象并只返回带有键的更新值?
因此,例如,我希望看到:
{
fullName: "Jane Dawn",
...etc...
}
我的用例是我想在提交到服务器之前向现有数据库数据和用户更新的表单数据的用户显示“之前”和“之后”视图。
解决方案
如果它是平面对象,即没有嵌套对象或数组,则可以_.pickBy()
在更新的对象上使用,并从原始对象中获取不等于相似属性的每个属性:
const originalObj = {"name":"Jane","fullName":"Jane Doe","nickname":"Janey"}
const updatedObj = {"name":"Jane","fullName":"Jane Dawn","nickname":"Janey"}
const result = _.pickBy(updatedObj, (v, k) => !_.isEqual(originalObj[k], v))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
如果您需要比较嵌套对象,请使用包,例如deep-object-diff 。
推荐阅读
- php - Sentrifugo - PHP 无法正确显示 Unicode(越南语)
- r - how to count the number of rows of specific column that has specific character
- php - 比较2个数组的值,然后使用匹配值的键来移动文件
- wxpython - 如何滚动到 wxTextCtrl 的底部并重绘屏幕
- ocaml - int 选项和 int 之间的加法
- c++ - Googletest 在 bazel 测试中永远不会失败(应该在哪里失败),但可以与 cmake 和 clion 一起使用
- javascript - 如何在nodejs中发送响应错误代码
- java - 向列表中添加第二项似乎会覆盖我添加的第一个元素
- javascript - 电子
: Uncaught SyntaxError: Unexpected token - php - 调用未定义的方法 Silverstripe Gridfield