亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當索引從 0 以外的任何值開始時,forEach 不是一個函數

當索引從 0 以外的任何值開始時,forEach 不是一個函數

慕姐8265434 2023-08-24 18:27:35
當對象內部不存在以 0 開頭的索引時,它返回:類型錯誤:data.forEach 不是函數數據庫如下所示:如果我將索引為 0 的對象添加到數據庫中,如下所示(我的格式并不重要,這只是為了說明層次結構):0: {  email: "testmail",  uid: "testuid"}突然,forEach 函數開始工作,并且還檢索索引為 3 和 4 的用戶。例如,如何使 forEach 循環從索引 3 開始?或者我應該使用不同的方法?我的代碼:  useEffect(() => {    if(props.klasData.gebruikers !== undefined) {      var data = props.klasData.gebruikers;      data.forEach(function (user) {        if(!emails.hasOwnProperty(user.email)) {          addEmail(oldArray => [...oldArray, user.email]);        }        setPending(false)      })    }  }, []);編輯 props.klasData.gebruikers 返回“gebruikers”對象中的所有鍵及其子項。
查看完整描述

2 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

看起來您的數據被 Firebase SDK 解釋為數組,因為它以連續的數字鍵開頭。如果打印快照的值gebruikers,您會看到它是:

[null, null, null, {email: "test", uid: "test"}, {email: "wouter@...", uid: "..."}]

這些null值由 Firebase SDK 添加,以將鍵轉換為正確的數組。

如果您希望阻止 Firebase SDK 將數據轉換為數組,請在鍵前添加非數字字符。例如:

"key2": {email: "test", uid: "test"}, 
"key3": {email: "wouter@...", uid: "..."}

一般來說,使用用戶的 UID 作為用戶集合中的鍵更為慣用。這樣,您就不需要查詢 UID,并且會自動保證每個用戶/UID 只能出現在集合中。


查看完整回答
反對 回復 2023-08-24
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

我更改了數據庫,就像您在此處看到的那樣。正如 Frank 所預測的那樣,我的問題根源在于我沒有發布的函數。


通過將從數據庫獲取的所有 UID 索引轉換為連續的數字鍵,我成功地使 forEach 函數正常工作。我這樣做是使用users = Object.values(users).filter((el) => {return el != null}). 完整的效果鉤子可以在下面找到:


? useEffect(() => {

? ? var refCodes = firebase.database().ref("userdata/" + currentUser.uid + "/docentCodes").orderByKey();

? ? refCodes.once("value").then(function (snapshotCodes) {

? ? ? snapshotCodes.val().forEach(function (code) {

? ? ? ? var refCodeData = firebase.database().ref("klassencodes/" + code).orderByKey();

? ? ? ? refCodeData.once("value").then(function (snapshotCodeData) {

? ? ? ? ? var users = snapshotCodeData.val().gebruikers;

? ? ? ? ? users = Object.values(users).filter((el) => {return el != null})

? ? ? ? ? if(snapshotCodeData.val() !== null) {

? ? ? ? ? ? setUsercount(oldArray => [...oldArray, users.length]);

? ? ? ? ? ? setKlasData(oldArray => [...oldArray, snapshotCodeData.val()]);

? ? ? ? ? ? setUserdata(oldArray => [...oldArray, users]);

? ? ? ? ? ? addCode(oldArray => [...oldArray, code])

? ? ? ? ? }

? ? ? ? ? setPending(false);

? ? ? ? })

? ? ? })

? ? })

? }, []);

在使用此 useEffect 的函數中,我添加了const [userdata, setUserdata] = React.useState([]);從 UID 索引剝離到由數字鍵組成的索引的新信息。該用戶數據被導出到另一個函數,該函數具有原始問題中所述的效果鉤子。我將其更改為:


? useEffect(() => {

? ? if(props.userData !== undefined) {

? ? ? var data = props.userData;

? ? ? if(data !== undefined) {

? ? ? ? data.forEach(function (user) {

? ? ? ? ? if(!emails.hasOwnProperty(user.email)) {

? ? ? ? ? ? addEmail(oldArray => [...oldArray, user.email]);

? ? ? ? ? ? addUID(oldArray => [...oldArray, Object.keys(props.klasData.gebruikers)]);

? ? ? ? ? }

? ? ? ? ? setPending(false)

? ? ? ? })

? ? ? }

? ? }

? }, []);

概括

回想起來,我應該只為用戶數據 ( ) 使用單獨的常量snapshotCodeData.val().gebruikers,與從快照 ( snapshotCodeData.val()) 返回的其他數據分開。


我希望這可以幫助你。黃金代碼行是users = Object.values(users).filter((el) => {return el != null}).


查看完整回答
反對 回復 2023-08-24
  • 2 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號