Tengo un Componente y un Servicio de:

Componente:

JS:

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);  
        }
}

Servicio:

JS:

@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;
      }
}

Quiero llegar a la Persona el Elemento con el Id (‘personID’). El personID tengo de Routeparam. Para que necesito el bucle foreach? Pero yo he encontrado una solución para esto.

Gracias de antemano!

  • Usted puede encontrar un elemento con Id como este las personas.encontrar(persona => persona.id === personId)
InformationsquelleAutor trap | 2016-06-22

6 Comentarios

  1. 203

    Que usted necesita para utilizar el método Array.filtro:

    this.persons =  this.personService.getPersons().filter(x => x.id == this.personId)[0];
    

    o Array.encontrar

    this.persons =  this.personService.getPersons().find(x => x.id == this.personId);
    
    • ERROR TypeError: No se puede leer la propiedad ‘buscar’ undefined
    • método this.personService.getPersons() devuelve undefined
    • no deberíamos usar la triple es igual a?
    • que sí, que va a hacer. Sin embargo, para esta pregunta no es demasiado importante.
    • En primer código que parece críptico para mí, pero podría ayudar a leer «find(x => x.id == este.personId» como «encontrar x, donde x es el id es igual a esta de identificación de la persona» yo no sé acerca de otras personas, pero para mí esto es mucho más fácil de recordar.
  2. 53

    Asumir que tengo debajo de la matriz:

    Skins[
        {Id: 1, Name: "oily skin"}, 
        {Id: 2, Name: "dry skin"}
    ];
    

    Si queremos obtener con Id = 1 y Name = "oily skin", vamos a tratar como a continuación:

    var skinName = skins.find(x=>x.Id == "1").Name;
    

    El resultado devolverá el skinName es «la piel grasa».

    Por favor tome un intento, Gracias y un sentido!

    Angular 2 Transcripción cómo encontrar el elemento de la Matriz

    • Gracias por este fragmento de código, que podría proporcionar algunos a corto plazo limitado de ayuda. Una explicación adecuada , mejoraría mucho su valor de largo plazo, mostrando a la porque esta es una buena solución para el problema y que sea más útil para los lectores futuros con otras preguntas similares. Por favor, editar su respuesta a añadir alguna explicación, incluyendo las suposiciones que hemos hecho.
    • Cómo harías esto por una matriz vacía inicialmente, a continuación, de forma dinámica pobladas… no parece ser un problema al compilar…. la propiedad e.g Id se convierte en desconocido.
    • Hola @rey_coder, creo que deberíamos comprobar si la matriz no nula antes de la implementación para obtener la matriz de elementos de elemento. Como: testArray = []; testArrayItem = testArray.longitud>0? testArray.find(x=>x.Id== 1).Nombre: ‘testArray null’; console.log(testArrayItem);
    • Hola @hai-dinh, Que ordenan el problema. Gracias.
  3. 7

    Transformar la estructura de datos de un mapa si se utiliza con frecuencia esta búsqueda

    mapPersons: Map<number, Person>;
    
    //prepare the map - call once or when person array change
    populateMap() : void {
        this.mapPersons = new Map();
        for (let o of this.personService.getPersons()) this.mapPersons.set(o.id, o);
    }
    getPerson(id: number) : Person {
        return this.mapPersons.get(id);
    }
    
  4. 4

    Utilizar este código en tu servicio:

    return this.getReports(accessToken)
            .then(reports => reports.filter(report => report.id === id)[0]);
    
  5. 0

    Probar este

              let val = this.SurveysList.filter(xi => {
            if (xi.id == parseInt(this.apiId ? '0' : this.apiId))
              return xi.Description;
          })
    
          console.log('Description : ', val );
    

Dejar respuesta

Please enter your comment!
Please enter your name here