获取javascript中两个对象之间差异的属性

时间:2017-10-25 10:47:18

标签: javascript object difference

假设我有一个看起来像这样的对象:

{
  prop1: false,
  prop2: false,
  prop3: false
}

和另一个看起来像这样的对象:

{
  prop1: false,
  prop2: true,
  prop3: false
}

其中差异在prop2属性中。是否有任何方法或库(虽然首选香草)将比较两个对象,找到具有不同值的属性,并返回属性名称(在本例中为prop2)?

我尝试使用lodash中的差异和差异功能没有成功。任何帮助或建议将不胜感激!

3 个答案:

答案 0 :(得分:10)

您可以通过检查不相等的值来过滤键(假设相同的键)。



var obj1 = { prop1: false, prop2: false, prop3: false },
    obj2 = { prop1: false, prop2: true, prop3: false },
    difference = Object.keys(obj1).filter(k => obj1[k] !== obj2[k]);
    
console.log(difference);




答案 1 :(得分:0)

此功能将提取两个对象之间的所有差异。它也适用于嵌套对象。

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);
}

答案 2 :(得分:-2)

这是最快最简单的方法

var a ={
  prop1: false,
  prop2: false,
  prop3: false
}

var b={
  prop1: false,
  prop2: true,
  prop3: false
}

 JSON.stringify(a) === JSON.stringify(b) 

此返回false。 道具的顺序也很重要