我有2个对象。对于所有属性,第一个对象A的默认值为'enabled'。
public A(): any {
const enabledObject = { enabled: true };
return {
property1: enabledObject,
property2: enabledObject,
property3: enabledObject,
property4: enabledObject,
};
}
第二个对象具有不同的属性
public B(): any {
const appProperty = {
property1: { enabled: true },
property2: { enabled: false},
property3: { enabled: true },
property4: { enabled: false},
};
}
我想返回对象A减去对象B中指定为“ enabled = false”的所有属性。
public A(): any {
const enabledObject = { enabled: true };
return {
property1: enabledObject,
property3: enabledObject,
};
}
我正在尝试通过以下方法解决此问题,但它不起作用。
return _.assignInWith(A, B, this.Disabled);
private Disabled(destination: any, source: any, key: any): any {
const disabledObject = { enabled: false };
if (_.isUndefined(destination)) {
return disabledObject;
}
return destination;
}
答案 0 :(得分:0)
还有一种不使用lodash
的简单解决方案:
function AmB(): any {
const a = A();
const b = B();
const res = {};
for (let aKey in a) {
if (!b[aKey] || b[aKey].enabled) {
res[aKey] = a[aKey];
}
}
return res;
}
答案 1 :(得分:0)
虽然我不知道loadash语法,但可以通过JavaSscript轻松完成(或转换为Typescript)
var enabledObject = { enabled: true };
var A = {
property1: enabledObject,
property2: enabledObject,
property3: enabledObject,
property4: enabledObject
};
var B = {
property1: { enabled: true },
property2: { enabled: false},
property3: { enabled: true },
property4: { enabled: false}
};
var diff = {};
for(var p in A){
//diff[p] = {};
//if B does not have the property, add it to result and continue
if (!B.hasOwnProperty(p)) {
diff[p] = A[p];
} else {
if(B[p].hasOwnProperty('enabled') && !B[p]['enabled']) {
diff[p] = A[p];
}
}
}
只需在浏览器的控制台上运行此代码并打印diff变量
如果愿意,您可以进一步推广逻辑以比较两个具有不同结构的对象并返回差异
答案 2 :(得分:0)