假设我有一个看起来像这样的对象:
{
prop1: false,
prop2: false,
prop3: false
}
和另一个看起来像这样的对象:
{
prop1: false,
prop2: true,
prop3: false
}
其中差异在prop2
属性中。是否有任何方法或库(虽然首选香草)将比较两个对象,找到具有不同值的属性,并返回属性名称(在本例中为prop2
)?
我尝试使用lodash中的差异和差异功能没有成功。任何帮助或建议将不胜感激!
答案 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。 道具的顺序也很重要