我从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
答案 0 :(得分:0)
如果我正确地阅读您的代码,您可以做几件事:
async
函数获取更具线性的代码.map()
代替for-and-push 这样的事情:
public async fetchAndProcess(/* args */) {
try {
const res = await this.http.post("get-content.php", urlParams); // Assuming fetch
const json = await res.json();
return result = json.map(item => new ContentData().deserialize(item));
} catch (e) { this.handleError(e); }
}
我要做的另一件事是创建静态方法ContentData.fromSerialized()
或修改ContentData
的构造函数以接受item
。但这更多地出现在代码风格领域。