如何更改此功能以使用下面描述的JSON更改?
当前函数返回admin
,但是使用新的JSON,添加了新的users
对象。新函数应成功观察现有的admins
数组和新的getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users)
.map((r: Response) => r.json().assets.users as User[]);
}
数组。
/api/users
JSON从{
"assets": {
"users": [
// user objects
]
}
users
...现在返回两个数组,admins
和{
"assets": {
"users": [
// array of user objects
],
"admins": [
// array of admin objects
]
}
。
User
请假设我的代码已经创建了Admin
和{{1}}个类,这些类正确反映了返回的相关JSON对象的属性。
答案 0 :(得分:1)
嗯,您有几个选项可以返回数据:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
const assets = r.json().assets;
return {
users: assets.users as User[],
admins: assets.admins as Admin[]
}
});
}
或者像这样:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
return [
assets.users as User[],
assets.admins as Admin[]
]
});
}
或者像这样:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
return [
...assets.users as User[],
...assets.admins as Admin[]
]
});
}
答案 1 :(得分:1)
如果要在同一个数组中返回用户和管理员,以下代码应该可以解决问题:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users)
.map((r: Response) => {
var results = r.json();
return results.assets.users.concat(results.assets.admins);
}
}
使用以下数据:
{
"assets": {
"users": [
{ "name": "bob" }, { "name": "john" }
],
"admins": [
{ "name": "jill" }, { "name": "donald" }
]
}
结果将等于:
[ { "name": "bob" }, { "name": "john" }, { "name": "jill" }, { "name": "donald" } ]
正如我对@Maximus回答的评论中所解释的,.map()
用于将数组转换为新数组,这就是为什么要将函数提供给.map()
以告诉它你是什么数组的原因正在寻找。