【问题标题】:Loop through the keys a Type in Typescript and remove the ones which have the value as undefined遍历 Typescript 中的键 a 并删除值为 undefined 的键
【发布时间】:2021-08-10 05:08:14
【问题描述】:

我有一个像这样在打字稿中描述的类型 -

export type User = {
  name: string;
  username: string;
  phoneNumber: string;
  personalEmail?: string;
  workEmail?: string
}

我正在从一个 json 文件中获取一些数据,该文件由这些对象组成,并将数据整形为具有此功能的每个对象的这种类型的用户

const shaper = (obj: any): User {
  const user: User = {
    name: obj.name,
    username: obj.username,
    number: obj.number,
    personalEmail: obj.personalEmail,
    workEmail: obj.workEmail,
  }

 // remove from user the fields which have value === undefined
  return user;
}

在 shaper 函数中,我想删除变量 user 的值为 undefined 的字段(例如:obj.personalEmail 不存在)

我如何做到这一点?

【问题讨论】:

  • 单独分配属性值并检查该值是否为undefined,然后不要将其分配给user对象。
  • 在大多数情况下,您可以将其分配为undefined

标签: javascript json typescript casting


【解决方案1】:

这里有一个工作示例。

您可以使用delete obj[key]

const shaper = (obj) => {
  const user = {
    name: obj.name,
    username: obj.username,
    number: obj.number,
    personalEmail: obj.personalEmail,
    workEmail: obj.workEmail,
  }

  Object.entries(user).forEach(([key, value]) => {
    if (value === undefined) {
      delete user[key];
      console.log("deleted", key);
    }
  });
  return user;
}

const shapedResult = shaper({
  name: "foo",
  workEmail: "bar@bar.com"
});

console.log(shapedResult);

【讨论】:

    【解决方案2】:

    你可以这样做:

    /* Test Data */
    const test = {
      name: 'name',
      username: 'username',
      needToRename: '123456789',
      another: 'blah',
      something: 'else',
      workEmail: 'hello@example.com'
    }
    
    
    
    /* Example 1 */
    const shaper = ({name, username, needToRename:phoneNumber, personalEmail, workEmail}) => {
      return {
          name,
          username,
          phoneNumber,
          ...( personalEmail !== undefined && {personalEmail} ),
          ...( workEmail !== undefined && {workEmail})
      }
    }
    console.log(shaper(test));

    或者您可以将未定义的检查提取到辅助函数中并执行以下操作:

    /* Test Data */
    const test = {
      name: 'name',
      username: 'username',
      needToRename: '123456789',
      another: 'blah',
      something: 'else',
      workEmail: 'hello@example.com'
    }
    
    /* Example 2 */
    function undefinedHelper(name, obj) {
      return obj[name] === undefined ? {} : {[name]: obj[name]};
    }
    const shaper2 = (obj) => {
      return {
          name: obj.name,
          username: obj.username,
          phoneNumber: obj.needToRename,
          ...undefinedHelper('personalEmail', obj),
          ...undefinedHelper('workEmail', obj)
      }
    }
    console.log(shaper2(test));

    这个答案很有帮助:https://stackoverflow.com/a/40560953/2344607

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多