簡體   English   中英

數組 [值] 的奇怪行為

[英]Odd behavior for array[value]

我正在嘗試檢查成員(來自成員數組)是否是官員(來自官員數組),但即使我復制了確切的已知值,它也不匹配。 我肯定錯過了什么。

在此處輸入圖像描述

    getClanMemberInfo() {
  this.clanMemberInfo = [];
  console.log(this.clan.members);
  console.log(this.clan.officers);
  for (var i = 0; i < this.clan.members.length; i++) {
    firebase
      .firestore()
      .collection("profiles")
      .doc(this.clan.members[i])
      .get()
      .then(profile => {
        var info = profile.data();
        console.log(this.clan.officers['sJUZKKhLDvPDBWPILdzCN9waFpb2'])
        if (this.clan.officers[this.clan.members[i]]) {
          console.log("Hi officer");
          info.officer = true;
        } else {
          console.log("BAT");
          info.officer = false;
        }
        this.clanMemberInfo.push(info);
      });
  }
}

您可以看到我為 console.log 輸入了確切的值,它仍然未定義,但從上面的 console.logs 中它們不是空的。

我不明白為什么簡單的比較不匹配。

在此處輸入圖像描述

for (var i = 0; i < this.clan.members.length; i++) {
    firebase
      .firestore()
      .collection("profiles")
      .doc(this.clan.members[i])
      .get()
      .then(profile => {
        var info = profile.data();

        for (var o = 0; o < this.clan.officers.length; o++) {
          console.log(this.clan.officers[o]);
          console.log(this.clan.members[0]);
          if (this.clan.officers[o].toString() === this.clan.members[i]) {
            console.log("Hi officer");
            info.officer = true;
          } else {
            console.log("BAT");
            info.officer = false;
          }
        }

        this.clanMemberInfo.push(info);
      });
  }
}

首先,可以使用index號訪問Array值。

getClanMemberInfo() {
  this.clanMemberInfo = [];
  console.log(this.clan.members);
  console.log(this.clan.officers);
  for (var i = 0; i < this.clan.members.length; i++) {
    firebase
      .firestore()
      .collection("profiles")
      .doc(this.clan.members[i])
      .get()
      .then(profile => {
        var info = profile.data();
        // you are looping using members length so use members below with index
        console.log(this.clan.members[i])
        // you can check if your member is an officer or not by below line
        if (this.clan.officers.includes(this.clan.members[i])) {
          console.log("Hi officer");
          info.officer = true;
        } else {
          console.log("BAT");
          info.officer = false;
        }
        this.clanMemberInfo.push(info);
      });
  }
}

似乎 this.clan.officers 是一個字符串數組,而不是字典。

所以 this.clan.officers[0] 被定義為 'sJUZKKhLDvPDBWPILdzCN9waFpb2'

但是 this.clan.officers['sJUZKKhLDvPDBWPILdzCN9waFpb2'] 純粹是胡言亂語。

如果要檢查給定字符串是否存在於值數組中,可以使用Array.prototype.includes()

isOfficer = officers.includes('sJUZKKhLDvPDBWPILdzCN9waFpb2');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM