Как я могу сопоставить объект с подписью индекса? - PullRequest
0 голосов
/ 28 апреля 2019

Я собираюсь написать приложение на английском языке. Получает ответ от API. Внутри этого ответа находится массив, индексированный строками (подпись индекса). Как я могу сопоставить этот массив в обычный массив?

API выглядит следующим образом

{
    "Information": {
        "Created": "2019-04-25",
        "Version": "1.2"
    },
    "Files": {
        "2019-04-26": {
           'name': 'file1',
           'size': 5,
        },
        "2019-04-25": {
            'name': 'file2',
            'size': 3,
        },
    ...
        }
    }

И я хочу отобразить это объект, который выглядит так

export class Model {
  'Information': {
    'Created': string,
    'Version': string,
  };
  'Files': [{ 
    'date': Date,
    'name': string,
    'size': number,
  }];
}

Здесь я хотел бы отобразить ответ

getdata(url): void {
      this.http.get<>(url).subscribe(data => {
        // code
        }
      );
  }

Ответы [ 3 ]

0 голосов
/ 28 апреля 2019
Object.keys(o.Files)
  .map(function(k ) {
    return {date: k, name: o.Files[k].name, size: o.Files[k].size}
  });
0 голосов
/ 28 апреля 2019

Вероятно, это должно выглядеть так:

data: Array<Data>;
    
getData() {
  this.http.get(`url`).subscribe((data) => {
     this.data = data.map(item => {
      const output = {};
      output.information = item.information;
      output.files = Object.keys(item.files).map(key => {
        return {
          date: new Date(key),
          name: item.files[key].name,
          size: item.files[key].size
        };
      });
      return output;
     });
  });
}
0 голосов
/ 28 апреля 2019

Я не проверял ничего из этого, но в итоге цикл for извлекает все ключи объекта data.File, и вы можете получить доступ к этому объекту через этот ключ.

getdata(url): void {
  this.http.get<>(url).subscribe((response: any) => {
    const model: Model = new Model();
    model.Files = [];

    if (response.Information) {
      const information: any = response.Information;
      if (information.Created && information.Version) {
        model.Information = {
          'Created': information.Created,
          'Version': information.Version
        };
      }
    }

    for (const date in data) {
      if (data.File.hasOwnProperty(date)) {
        const file: any = data.File[date];
        model.Files.push({
          'date': date,
          'name': file.name,
          'size': file.size
        });
      } 
    }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...