JS доступ к индексу массива возвращает неопределенное - PullRequest
0 голосов
/ 02 марта 2020

У меня есть некоторый код, который получает массив в виде наблюдаемой, которая находится в отдельном компоненте.

Теперь, когда я инициализирую домашний компонент, я получаю массив, к которому я пытаюсь получить доступ, я получаю значение, когда Однако я получаю доступ к первому элементу, когда пытаюсь получить доступ к любому другому элементу, который я получаю неопределенным.

Как решить эту проблему.

Вот мой код. Контактный компонент

public contactsChanged = new Subject();
  public updatedContact;
  key = 'contacts';
 mContacts = [
   {
    id: 0,
    name: '',
    number: ''
   },
   {
    id: 1,
    name : '',
    number: ''
   },
   {
    id: 2,
    name : '',
    number: ''
   },
   {
    id: 3,
    name : '',
    number: ''
   }
  ];

  ngOnInit() {

    this.appData.currentContacts().subscribe((contacts: [string]) =>
    this.updatedContact = contacts);
    this.getContact();
  }
  dismiss() {
    this.modalController.dismiss({
      dismissed: true
    });
  }
  pickContact(contactId) {
    this.mContacts[contactId].name = "Mitchell";
    this.mContacts[contactId].number = (Math.random() * 0.5).toString();

    this.appData.changeContacts(this.mContacts);
    this.saveContacts();

    // this.contacts.pickContact().then((contact) => {

    //   this.mContacts[contactId].name = contact.name.givenName;
    //   this.mContacts[contactId].number = contact.phoneNumbers[0].value;
    //   this.appData.changeContacts(this.mContacts);
    //   this.saveContacts();
    //   console.log('Contacts saved: ');
    // });

  }
  saveContacts() {
    this.storage.set(this.key, JSON.stringify(this.mContacts));
  }
  getContact() {
    this.storage.get(this.key).then((val) => {
      console.log('Contact Name: ', val);
      if (val != null && val !== undefined) {
        this.mContacts = JSON.parse(val);
        this.appData.changeContacts(this.mContacts);
      }
    });
  }

}

Служба, которую я использую для наблюдаемых


 private contacts = new BehaviorSubject<[string]>(['']);

currentContacts(): Observable<[string]> {
     return this.contacts.asObservable();
  }

changeContacts(contacts) {
    this.contacts.next(contacts);
  }

и домашний компонент, который пытается отобразить данные


 this.appData.currentContacts().subscribe((contacts: [string]) => {
      this.mContacts = contacts;
      this.numberOne = this.mContacts[0].number;
      // this.numberTwo = this.mContacts[1].number;
      console.log("mContacts: " , this.mContacts);
      console.log("Contacts: " , contacts );
      console.log("mContacts num: " + this.mContacts[1].number);
    });

Теперь, когда Я пытаюсь позвонить this.mContacts[0].number, тогда это работает, но если я пытаюсь this.mContacts[1].number, тогда я получаю ошибку

console.log(this.mContacts) возвращает

0: Object { id: 0, name: "Mitchell", number: "0.27670880550635446" }
​
1: Object { id: 1, name: "Mitchell", number: "0.3120836066243317" }
​
2: Object { id: 2, name: "Mitchell", number: "0.20501487579574068" }
​
3: Object { id: 3, name: "Mitchell", number: "0.17382789003990085" }

Ошибка вывода при попытке вызвать this.mContact[1].number

ERROR TypeError: "this.mContacts[1] is undefined"
...