Typescript-要替换属性的值,因为它不是默认值

时间:2018-09-07 20:43:53

标签: javascript typescript lodash

我有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;
}

3 个答案:

答案 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;
}

Stackblitz demo of this example

答案 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)

您可以使用lodash实现以下目的:

config.assets.compile = true

您可以看到此功能here