我有两个对象A
var A = {
a: 1,
b: 2,
c: 3,
d: {
0: {
e: 4,
f: 5
},
1: {
g: 6
}
}
};
var B = {
a: 1,
b: 9,
c: 3,
d: {
0: {
e: 4,
f: 8
}
}
};
我想将B中的所有属性与A中的相应属性进行比较(如果存在)。如果它们的值不匹配则返回。
所以我想返回
b: 9,
d:{
0: {
f: 8
}
}
在lodash方式中是否有一个简单的解决方案?
编辑:我为A和B尝试了Object.keys,做了一个交集,然后比较每个键值。当我有嵌套属性时,它失败了。
答案 0 :(得分:1)
这是一个使用lodash检测简单嵌套对象和数组中的更改的基本函数。它并不全面,但它适用于简单的变更集。
function changes (a, b) {
if (_.isEqual(a, b)) {
return;
} else {
if (_.isArray(a) && _.isArray(b)) {
return _.reduce(b, function(array, value, index) {
value = changes(a[index], value);
if (!_.isUndefined(value)) {
array[index] = value;
}
return array;
}, []);
} else if (_.isObject(a) && _.isObject(b)) {
return _.reduce(b, function(object, value, key) {
value = changes(a[key], value);
if (!_.isUndefined(value)) {
object[key] = value;
}
return object;
}, {});
} else {
return b;
}
}
}
以下是其中的一个示例:http://plnkr.co/edit/drMyGDAh2XP0925pBi8X?p=preview