获取javascript中两个对象之间差异的属性
假设我有一个像这样的对象:获取javascript中两个对象之间差异的属性,javascript,object,difference,Javascript,Object,Difference,假设我有一个像这样的对象: { prop1: false, prop2: false, prop3: false } { prop1: false, prop2: true, prop3: false } 另一个物体看起来像这样: { prop1: false, prop2: false, prop3: false } { prop1: false, prop2: true, prop3: false } 差异在prop2属性中。是否有任何
{
prop1: false,
prop2: false,
prop3: false
}
{
prop1: false,
prop2: true,
prop3: false
}
另一个物体看起来像这样:
{
prop1: false,
prop2: false,
prop3: false
}
{
prop1: false,
prop2: true,
prop3: false
}
差异在prop2
属性中。是否有任何方法或库(当然是首选)可以比较这两个对象,找到具有不同值的属性,并返回属性名称(在本例中为prop2
)
我曾尝试在lodash中使用difference和differenceBy函数,但没有成功。任何帮助或建议都将不胜感激 这是最快最简单的方法
var a ={
prop1: false,
prop2: false,
prop3: false
}
var b={
prop1: false,
prop2: true,
prop3: false
}
JSON.stringify(a) === JSON.stringify(b)
这个报税表是假的。
道具的顺序也很重要您可以通过检查不相等的值来筛选关键点(假设关键点相同)
var obj1={prop1:false,prop2:false,prop3:false},
obj2={prop1:false,prop2:true,prop3:false},
差异=对象.keys(obj1).filter(k=>obj1[k]!==obj2[k]);
控制台日志(差异)代码>此函数将提取两个对象之间的所有差异。它也适用于嵌套对象
function difference(object, base) {
function changes(object, base) {
return _.transform(object, function(result, value, key) {
if (!_.isEqual(value, base[key])) {
result[key] = (_.isObject(value) && _.isObject(base[key])) ? changes(value, base[key]) : value;
}
});
}
return changes(object, base);
}
这并没有回答这个问题。这个解决方案没有考虑到输入可能是嵌套对象。一个更好的解决方案可能是在这里添加键差异作为结果。@loretoparisi,这个解决方案完全采用op的对象,而不是给定的嵌套对象。你是对的,我的意思是尽可能通用。@NinaScholz所以我在这里问了一个新问题