Eu tenho um componente e um serviço:
Componente:
export class WebUserProfileViewComponent {
persons: Person [];
personId: number;
constructor( params: RouteParams, private personService: PersonService) {
this.personId = params.get('id');
this.persons = this. personService.getPersons();
console.log(this.personId);
}
}
Serviço:
@Injectable()
export class PersonService {
getPersons(){
var persons: Person[] = [
{id: 1, firstName:'Hans', lastName:'Mustermann', email: '[email protected]', company:'Test', country:'DE'},
{id: 2, firstName:'Muster', lastName:'Mustermann', email: '[email protected]', company:'test', country:'DE'},
{id:3, firstName:'Thomas', lastName:'Mustermann', email: '[email protected]', company:'test', country:'DE'}
];
return persons;
}
}
Quero obter o item da pessoa com o ID ('personID'). O personID que recebo do Routeparam. Para isso eu preciso do loop foreach? Mas não encontrei uma solução para isso.
angular
typescript
angular2-services
armadilha
fonte
fonte
Respostas:
Você precisa usar o método
Array.filter
:ou
Array.find
fonte
this.personService.getPersons()
retorna #undefined
Suponha que eu tenho abaixo da matriz:
Se queremos obter o item com
Id = 1
eName = "oily skin"
, tentaremos o seguinte:O resultado retornará o nome da pele é "Pele oleosa".
Por favor, tente, obrigado e melhor consideração!
fonte
Transforme a estrutura de dados em um mapa, se você usa frequentemente essa pesquisa
fonte
Uma opção interessante ainda não mencionada é usar combinar
.find
com funções de seta e desestruturação. Veja este exemplo do MDN .fonte
do TypeScript, você pode usar o método filter () JS array nativo:
retorna uma matriz com apenas elementos correspondentes da matriz original (0, 1 ou mais)
Referência: https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
fonte
Use este código em seu serviço:
fonte
Tente isto
fonte