首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用lodash在两个对象之间进行深度比较?

如何使用lodash在两个对象之间进行深度比较?
EN

Stack Overflow用户
提问于 2015-07-29 01:17:57
回答 17查看 454.1K关注 0票数 414

我有两个不同的嵌套对象,我需要知道它们的嵌套属性是否有所不同。

var a = {};
var b = {};

a.prop1 = 2;
a.prop2 = { prop3: 2 };

b.prop1 = 2;
b.prop2 = { prop3: 3 };

具有更多嵌套属性的对象可能会更加复杂。但这是一个很好的例子。我可以选择使用递归函数或带有lodash的其他东西...

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2015-07-29 01:19:55

一个简单而优雅的解决方案是使用_.isEqual,它执行深度比较:

var a = {};
var b = {};

a.prop1 = 2;
a.prop2 = { prop3: 2 };

b.prop1 = 2;
b.prop2 = { prop3: 3 };

console.log(_.isEqual(a, b)); // returns false if different
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

然而,这个解决方案并没有显示哪个属性是不同的。

票数 622
EN

Stack Overflow用户

发布于 2015-07-29 04:11:24

如果需要了解哪些属性不同,请使用reduce()

_.reduce(a, function(result, value, key) {
    return _.isEqual(value, b[key]) ?
        result : result.concat(key);
}, []);
// → [ "prop2" ]
票数 299
EN

Stack Overflow用户

发布于 2016-04-14 04:06:42

下面是一个使用Lodash的简明解决方案

_.differenceWith(a, b, _.isEqual);

注两个输入都需要是数组(可能是一个对象的数组)。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31683075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档