如何删除对象的所有属性(特定模型中定义的属性除外)?

时间:2018-06-21 07:45:44

标签: javascript typescript

当对象中的数据比预期的多时,我目前在将详细模型更改为不太详细的更新模型时遇到问题。尽管有Typescript,但可能是后端向我发送的数据比我在模型中期望的要多,然后又向回发送了太多数据,因为我不知道它们存在某些属性。

让我给你举个小例子:
   CarModel

  • 制造商
  • 模型
  • 颜色

UpdateCarModel

  • 颜色

从后端收到的对象:

  • 制造商
  • 模型
  • 颜色
  • yearOfConstruction

这是我当前的代码,它不会检测并删除其他属性:

import { merge as lodashMerge } from 'lodash';

public static buildFromCarModel(car: CarModel): UpdateCarModel {
  let clone = lodashMerge(new UpdateCarModel(), car);
  delete clone.manufacturer;
  delete clone.model;

  return clone;
}

现在的问题是,后端需要一个仅包含颜色的更新模型,但是隐式地将构建年份拖入了代码中。有没有一种方法可以给对象一个模型作为一种模板,并且只保留我期望的模型中的属性?


编辑:带标记的重复项中提出的解决方案对我来说很难使用,因为我必须指定所有属性以及所有方法,我更喜欢只读取和传输属性的解决方案,但没有功能

1 个答案:

答案 0 :(得分:0)

如果我理解您的问题是对的。然后,可能需要执行以下操作。请注意,您必须根据需要进行修改。

let requiredCar = {
  color: null
}

let car = {
  color: 'red',
  other: 'properties'
}

function map(model, requiredModel) {
  var retObj = {};
  Object.getOwnPropertyNames(requiredModel).forEach(key => {
    retObj[key] = model[key];
  })
  return retObj;
}

console.log(map(car, requiredCar));