访问数组中的值
Accessing value in an Array
我一直在做一个简单的测试项目,但我碰巧遇到了这个非常奇怪的问题。我无法访问数组中的值。
pokemonStats$: Observable<PokemonStats[]>;
getPokemonStats(id: number): any {
this.pokemonStats$
.pipe(take(1))
.subscribe(stats => {
console.log(stats instanceof Array);
console.log('length', stats.length);
console.log('du', stats);
console.log('test', stats[1]);
});
}
这是输出:
这是怎么回事?一位同事建议它可能是一个类似数组的结构,这就是我添加 'instanceof' 日志的原因。非常感谢任何帮助。
编辑:这是代码,它被填充的地方
this.pokemonStats$ = this.getAllPokemonStats(ids);
getAllPokemonStats(ids: number[]): Observable<PokemonStats[]> {
const pokemonArray: PokemonStats[] = [];
ids.forEach(id => {
const url = 'https://pokeapi.co/api/v2/pokemon/' + id;
this.http.get(url)
.pipe(take(1))
.subscribe((data: PokemonStatsAPI) => {
pokemonArray.push({
id: data.id,
name: data.name,
speed: data.stats[0].base_stat,
hp: data.stats[5].base_stat,
attack: data.stats[4].base_stat,
defense: data.stats[3].base_stat
});
});
});
return of(pokemonArray);
}
您正在使用 pokemonArray
返回新的可观察对象,它是空的并且将被异步填充,因此当您订阅 getAllPokemonStats
时它是空的。
使用 forkJoin
运算符执行 http 请求并使用 map
运算符映射它们:
getAllPokemonStats(ids: number[]): Observable<PokemonStats[]> {
return forkJoin(ids.map(id => {
return this.http.get(`https://pokeapi.co/api/v2/pokemon/${id}`);
})).pipe(
map(results => results.map(data => ({
id: data.id,
name: data.name,
speed: data.stats[0].base_stat,
hp: data.stats[5].base_stat,
attack: data.stats[4].base_stat,
defense: data.stats[3].base_stat
}))),
);
}
我一直在做一个简单的测试项目,但我碰巧遇到了这个非常奇怪的问题。我无法访问数组中的值。
pokemonStats$: Observable<PokemonStats[]>;
getPokemonStats(id: number): any {
this.pokemonStats$
.pipe(take(1))
.subscribe(stats => {
console.log(stats instanceof Array);
console.log('length', stats.length);
console.log('du', stats);
console.log('test', stats[1]);
});
}
这是输出:
这是怎么回事?一位同事建议它可能是一个类似数组的结构,这就是我添加 'instanceof' 日志的原因。非常感谢任何帮助。
编辑:这是代码,它被填充的地方
this.pokemonStats$ = this.getAllPokemonStats(ids);
getAllPokemonStats(ids: number[]): Observable<PokemonStats[]> {
const pokemonArray: PokemonStats[] = [];
ids.forEach(id => {
const url = 'https://pokeapi.co/api/v2/pokemon/' + id;
this.http.get(url)
.pipe(take(1))
.subscribe((data: PokemonStatsAPI) => {
pokemonArray.push({
id: data.id,
name: data.name,
speed: data.stats[0].base_stat,
hp: data.stats[5].base_stat,
attack: data.stats[4].base_stat,
defense: data.stats[3].base_stat
});
});
});
return of(pokemonArray);
}
您正在使用 pokemonArray
返回新的可观察对象,它是空的并且将被异步填充,因此当您订阅 getAllPokemonStats
时它是空的。
使用 forkJoin
运算符执行 http 请求并使用 map
运算符映射它们:
getAllPokemonStats(ids: number[]): Observable<PokemonStats[]> {
return forkJoin(ids.map(id => {
return this.http.get(`https://pokeapi.co/api/v2/pokemon/${id}`);
})).pipe(
map(results => results.map(data => ({
id: data.id,
name: data.name,
speed: data.stats[0].base_stat,
hp: data.stats[5].base_stat,
attack: data.stats[4].base_stat,
defense: data.stats[3].base_stat
}))),
);
}