ОШИБКА TypeError: невозможно прочитать свойства неопределенного (чтение «телефонов»)

У меня проблема, я получаю сообщение об ошибке "core.js:4196 ERROR TypeError: Cannot read properties of undefined (чтение "телефонов")"

Дело в том, что он мне говорит, что массив объектов, которые я просматриваю, пуст, при небольшой проверке и выполнении отладки я понимаю, что это не так. Это на самом деле не приходит бесконечно, данные - это что-то большое, да, среди 2800 данных это приносит вам почти 5 или 6 телефонов (так как они зарегистрированы)

В любом случае, что я действительно хочу сделать, так это получить номера телефонов пользователей «x» из объекта и выполнить автозаполнение, фильтрующее данные.

Я оставляю вам код, возможно, вы видите что-то, чего не вижу я:

.ТС

  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>

Объект

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

Спасибо!!

Наверное здесь, но я не очень понимаю, почему : [value] = "contact.phones[0]". Позже я вижу в шаблоне, что вы обрабатываете случай, когда contact является undefined, но не в этом атрибуте. Но учитывая ваши данные, contact не должно быть undefined в любом случае

Arnaud Denoyelle 22.03.2022 17:45
contact может быть неопределенным, если он отображается до завершения загрузки данных. Не могу сказать от этого.
James 22.03.2022 18:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта ошибка связана с тем, что вы используете старую версию машинописного текста, и необходимо проверить, существует ли массив и его длина больше 0, чтобы использовать любой метод массива, такой как фильтр, поиск, foreach и т. д.

Измените это в методе _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)
        }
      }
        
    );
  }

Дайте мне знать, если это сработало для вас.

Привет! Вы спасаете мою жизнь! Это работает, большое спасибо за ваше время.

Izlia 22.03.2022 21:46

Другие вопросы по теме