【发布时间】:2017-08-09 13:34:34
【问题描述】:
我从 php 返回一个对象数组,我想将这些数据转换为 ContentData 类的实例。
我目前有以下可行的方法,但是我有一种直觉,有一种更清洁的方法可以实现结果。
return this.http.post("get-content.php", urlParams)
.map(this.extractData)
.map(array => {
let newArray = Array<ContentData>();
array.forEach(obj => {
newArray.push(new ContentData().deserialize(obj));
});
return newArray;
})
.catch(this.handleError)
private extractData(res: Response): any {
return res.json();
}
有没有比这样迭代数组数据更简洁的方法?
来自 php 的响应是:
[
{"id":"1","dock_id":"46","type":"TEXT","content":"{\"text\": \"<p>test<\/p>\"}","last_updated":"2017-08-09 03:10:28","json":null},
{"id":"2","dock_id":"46","type":"TEXT","content":"{\"text\": \"<p>test test<\/p>\"}","last_updated":"2017-08-09 03:10:28","json":null}
]
预期的输出是[ContentData, ContentData, ...](只是一个一维数组)。
(2) [ContentData, ContentData]
0 : ContentData {content: "{"text": "<p>test</p>"}", dock_id: "46", type: 0, last_updated: "2017-08-09 03:10:28"}
1 : ContentData {content: "{"text": "<p>test test</p>"}", dock_id: "46", type: 0, last_updated: "2017-08-09 03:10:28"}
length : 2
【问题讨论】:
-
我知道您希望
ContentData[][]作为您的最终类型吗? -
@MadaraUchiha 只是期待一维数组,我更新了问题以澄清这一点。
-
这不是您当前返回的内容。好的,我去看看。
-
@MadaraUchiha 我已经用 php 请求的直接响应再次更新了问题。
-
哦,等等,
.map()不是我想的那样。它不是[].map甚至不是Bluebird.map(),它更类似于Promise 的.then()。我已经发布了答案,看看。
标签: angular typescript ecmascript-6