获取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所以我在这里问了一个新问题