Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

310
Views
ERROR TypeError: no se pueden leer las propiedades de undefined (leyendo 'teléfonos')

Tengo un problema, aparece el error "core.js:4196 ERROR TypeError: Cannot read properties of undefined (reading 'phones')"

El caso es que me dice que el array de objetos que estoy recorriendo está vacío, al revisar un poco y hacer depuración me doy cuenta que no es así. Eso en realidad no viene indefinidamente, los datos son algo grandes, eso sí, entre 2800 datos te trae casi 5 o 6 teléfonos (ya que esos son los que están registrados)

De todos modos, lo que realmente quiero hacer es obtener los números de teléfono de "x" usuarios de un objeto y hacer un autocompletado filtrando los datos.

Te dejo el código, tal vez veas algo que yo no:

.TS

 contactos: AddContacto[] = []; filteredContacts: Observable<AddContacto[]>; phoneControl: FormControl = new FormControl(); this.filteredContactos = this.phoneControl.valueChanges.pipe( startWith(null), map((search: string | null) => (search ? this._filterContactos(search) : this.contactos.slice())), ); private _filterContactos(search: string) { const filterValue = search.toLowerCase(); return this.contact.filter( (contact) => !!contact.phones.find((email) => contact.includes(search)) || contact.fullName.toLowerCase().includes(filterValue), ); }

.HTML

 <div class="containerTitle p-16"> <mat-form-field fxFlex="100" class="mr-12" appearance="outline" fxFlex="100"> <mat-label>Search Client</mat-label> <input type="text" placeholder="Add email..." matInput [formControl]="phoneControl" [matAutocomplete]="auto"> <mat-autocomplete #auto="matAutocomplete" > <mat-option *ngFor="contact of filteredContacts | async" [value]="contact.phones[0]"> {{contact?.phones[0]}} {{contact?.fullName ? '('+ contacto?.nombre_completo +')' : ''}} </mat-option> </mat-autocomplete> </mat-form-field> <small-loading class="loadingProgressBar" [loading]="loading"></small-loading> </div>

Objeto

 0: { "state": true, "coments": null, "phones": ["22222222"], "emails": [ "email@gmail.com" ], "fullName": "", "_id": "", "bitacora": {}, "__v": 0 }

¡¡Gracias!!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Ese error se debe a que está utilizando una versión anterior de TypeScript y es necesario verificar si la matriz existe y la longitud es mayor que 0 para usar cualquier método de matriz como filter, find, foreach, etc.

Cambie esto en su método _filterContactos.

 private _filterContactos(search: string) { const filterValue = search.toLowerCase(); return this.contact.filter( (contact) => { if (contact.phones && contact.phones.length > 0) { !!contact.phones.find((email) => contact.includes(search)) || contact.fullName.toLowerCase().includes(filterValue) } } ); }

Déjame saber si funcionó para ti.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!