【问题标题】:Build object[]based on dataset基于数据集构建对象[]
【发布时间】:2020-05-24 09:28:15
【问题描述】:

我有一个原始数据列表,例如以下 mockData 并且需要生成 object[] 格式,原始数据需要一些键值对,例如 first、last、state。但是一些键值对是昵称之类的选项。最终,我需要构建一个具有相同键值的对象数组,例如原始数据,并且某些键的值取决于另一个键的值,例如全名、地址。有没有更好的方法让我做到这一点并使其更加动态?因为我将有 20 多个不同的键值集,例如全名,需要由与原始数据相关的某些函数构建的地址 我不想创建很多全名、地址类型的代码

export const mockData: Human[] = [
  {
    first: 'name1',
    last: 'v1',
    state: 'ny',
  },
  {
    first: 'name2',
    last: 'v2',
    state: 'pa',
    nickname: 'rocketman',
  }]

export interface Human {
  first: string;
  last: string;
  state: string;
  nickname?: string;
}

export interface Student extends Human{
  fullname: string;
  address: string;
}

function setFullName(first: string, last: string): string {
    return `${first} ${last}`
}

function setAddress(first: string, last: string, state: string): string {
    return `${first} ${last} live a ${state}`
}

function buildStudentData(jsons: Human[]): Student[] {
  return jsons.map((json) =>  <Student> {
      first: json.first,
      last: json.last,
      nickname:  json.hasOwnProperty('nickname') ? json.nickname : json.first,
      fullname: setFullName(json.first, json.last),
      address: setAddress(json.first, json.last, json.state)})
}


console.log(buildStudentData(mockData));

【问题讨论】:

    标签: typescript typescript-typings typescript2.0


    【解决方案1】:

    不如创建一个类,其中计算字段是 getter:

    export class Student implements Human {
      public readonly first: string;
      public readonly last: string;
      public readonly state: string;
      public readonly nickname?: string;
    
      constructor(json: Human) {
        this.first = json.first;
        this.last = json.last;
        this.state = json.state;
        this.nickname = json.nickname;
      }
    
      public get fullName() {
        return `${this.first} ${this.last}`;
      }
    
      public get address() {
        return `${this.first} ${this.last} live a ${this.state}`;
      }
    }
    
    function buildStudentData(jsons: Human[]): Student[] {
      return jsons.map(json => new Student(json));
    }
    

    【讨论】:

    • 这是我的第一个想法。但是被拒绝的 cus 开发人员的 PR 不喜欢 OOD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2021-04-25
    • 2015-05-18
    • 1970-01-01
    • 2018-03-21
    • 2011-06-24
    相关资源
    最近更新 更多