2 回答

TA貢獻1811條經驗 獲得超5個贊
要訪問doc.data().IndexOfordoc.data().includes或任何其他與數組相關的函數,只需doc.data()像這樣轉換為數組:
var docArray = Object.values(doc.data());
docArray.includes(stringToSearchFor);
要么
Object.values(doc.data()).includes(stringToSearchFor);
這將允許您運行docArray.includes和docArray.IndexOf。轉換的原因是 firebase 返回整個文檔,它是對象的對象,您可以通過 console.log(doc.data()) 和原型字段看到這一點。發生這種情況是因為 firestore 將數組存儲為一個 json 對象,這意味著您看到的數組索引號實際上并不是索引號,它們只是對象鍵。
意義
0, 1, 2索引(或看起來)在哪里并且[email protected], [email protected], [email protected]是值,但在 firestore 中0, 1, 2實際上只是鍵,它們不是索引。因此,為了獲得我們剛剛運行的鍵(數字)或值(電子郵件)Object.keys(doc.data())// will return numbers,Object.values(doc.data())//will return emails您將獲得所需的數組,現在您可以對該數組運行操作。

TA貢獻1866條經驗 獲得超5個贊
我建議您將數據存儲在數組中,而不是像 Firestore 數據庫屏幕截圖所示的單獨字段。
您的 Firestore 文檔當前包含 6 個不同的字段,并且doc.data()您將此文檔中的所有 6 個字段作為一個 JavaScript 對象檢索:這就是 Array 方法無法工作的原因。如果將這些數據存儲在一個數組中(即一個數組類型的字段)就可以了。
您可以嘗試以下代碼:
const docRef = firebase.firestore().collection('mails').doc('emails');
docRef
.set({
mails: ['[email protected]', '[email protected]', '[email protected]'],
})
.then(() => {
return docRef.get();
})
.then((doc) => {
if (doc.exists) {
const email = '[email protected]';
console.log(doc.data().mails);
console.log(doc.data().mails.indexOf(email));
console.log(doc.data().mails.includes(email));
}
});
添加回答
舉報