我有两个不同的嵌套对象,我需要知道它们的嵌套属性是否有所不同。
var a = {};
var b = {};
a.prop1 = 2;
a.prop2 = { prop3: 2 };
b.prop1 = 2;
b.prop2 = { prop3: 3 };
具有更多嵌套属性的对象可能会更加复杂。但这是一个很好的例子。我可以选择使用递归函数或带有lodash的其他东西...
发布于 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>
然而,这个解决方案并没有显示哪个属性是不同的。
发布于 2015-07-29 04:11:24
如果需要了解哪些属性不同,请使用reduce()
_.reduce(a, function(result, value, key) {
return _.isEqual(value, b[key]) ?
result : result.concat(key);
}, []);
// → [ "prop2" ]
发布于 2016-04-14 04:06:42
https://stackoverflow.com/questions/31683075
复制相似问题