#angular #typescript #http #rxjs #observable
Вопрос:
как я могу изменить одно свойство наблюдаемого массива объектов? В моем сервисе я выполняю http-запрос, чтобы получить все задачи:
getTasks(): Observablelt;Task[]gt; { return this.httpClient.getlt;Task[]gt;('http://localhost:8080/tasks'); }
Это интерфейс моей задачи:
export interface Task { id: number; name: string; dueDate: Date; taskstatus: TaskStatus; user: User; }
Проблема в том, что дата ответа объекта http-запроса-это просто строка, хотя я определил ее в базе данных как метку времени, я просто получаю метку времени в виде строки, например «2021-09-25Т11:36:29.000 00:00».
Теперь мой вопрос в том, как я могу изменить значение внутри наблюдаемого, например: task.DueDate = новая дата(task.DueDate), чтобы я мог преобразовать все строки даты в фактические типы дат. (для всех объектов массива)
Ответ №1:
map
оператор используется для преобразования данных в наблюдаемых объектах, и вы будете использовать массив map
внутри rx map
для преобразования каждого объекта в массиве:
getTasks(): Observablelt;Task[]gt; { return this.httpClient.getlt;Task[]gt;('http://localhost:8080/tasks').pipe( map(tasks =gt; tasks.map(task =gt; { // do whatever to the task task.dueDate = new Date(task.dueDate); return task; })) ); }
возможно, вам придется повозиться со своими наборами, чтобы заставить его скомпилироваться.