我正在尝试创建一个变量来设置由get方法获得的对象的属性之一。
当我在console中进行订阅时,我会检索该数组的值,但是(我是初学者)很难设置该数组中对象的属性之一。
组件:
this.mainService.getGraph()
.subscribe(res => {
console.log(res)
this.name = res[''].map(res => res.name)
console.log(this.name)
Console.log:
(5) […]
0: Object { name: "Carlos", lastname: "Moura", participation: 5 }
1: Object { name: "Fernanda", lastname: "Oliveira", participation: 15 }
2: Object { name: "Hugo", lastname: "Silva", participation: 20 }
3: Object { name: "Eliza", lastname: "Souza", participation: 20 }
4: Object { name: "Anderson", lastname: "Santos", participation: 40 }
length: 5
<prototype>: Array []
main.component.ts:26:6
ERROR TypeError: "res[''] is undefined"
ngOnInit main.component.ts:27
RxJS 13
Angular 8
答案 0 :(得分:2)
res
重新定义为map
。name
到names
的复数形式,您需要一个字符串数组,因此复数形式更合适并传达字段包含的内容。res
上不存在的字段或索引,因为您有不正确的res['']
。ngOnInit
中,它可能位于其他位置,但这使我可以在其上方定义分配的变量成员。names: string[];
ngOnInit() {
this.mainService.getGraph()
.subscribe(res => {
console.log(res);
this.names = res.map(_ => _.name);
console.log(this.names);
}
从评论中:
... IDE表示类型'Object'上不存在属性'map'。会不会是一个错误
关于您的服务。确保返回类型上的签名正确。这是一个示例,您还可以定义一个接口并返回它,而不是返回{name:string}
(但保留[]表示有一个正在返回的数组)。
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
export class MainService {
constructor(private readonly http: HttpClient){}
getGraph() : Observable<{name: string}[]> {
return this.http.get<{name: string}[]>('/some/url');
}
}
答案 1 :(得分:0)
只需使用res.map(res => res.name)
。而不是res[''].map(res => res.name)
。在您的情况下,您尝试使用键等于对象内部空字符串的属性访问该属性,并且该属性不存在
答案 2 :(得分:0)
您可以直接在http get方法
中进行操作this.http.get(url).pipe(
map(res => {
res['newProperty'] = 'value';
return res;
})
);
即使您只想回电一个属性
this.http.get(url).pipe(
map(res => {
return res.name;
})
);