如何用lodash对2个对象进行深入比较?
2022-08-29 23:17:31
我有2个不同的嵌套对象,我需要知道它们是否在嵌套属性之一中有所不同。
var a = {};
var b = {};
a.prop1 = 2;
a.prop2 = { prop3: 2 };
b.prop1 = 2;
b.prop2 = { prop3: 3 };
该对象可能更复杂,具有更多嵌套属性。但这个就是一个很好的例子。我可以选择使用递归函数或带有lodash的东西...
我有2个不同的嵌套对象,我需要知道它们是否在嵌套属性之一中有所不同。
var a = {};
var b = {};
a.prop1 = 2;
a.prop2 = { prop3: 2 };
b.prop1 = 2;
b.prop2 = { prop3: 3 };
该对象可能更复杂,具有更多嵌套属性。但这个就是一个很好的例子。我可以选择使用递归函数或带有lodash的东西...
一个简单而优雅的解决方案是使用 _.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>
但是,此解决方案不会显示哪个属性不同。
如果你需要知道哪些属性是不同的,请使用 reduce():
_.reduce(a, function(result, value, key) {
return _.isEqual(value, b[key]) ?
result : result.concat(key);
}, []);
// → [ "prop2" ]