簡體   English   中英

如何分別從數組中獲取項目

[英]how to get items from array on respectively

我有一個包含唯一鍵的數組,這些鍵我想帶它從firebase實時數據庫中獲取他的數據,像這樣的數組

["dtnMG3dVEQXL1TPct3awl927jax2", "y5eAQppoEZRELsDL3hLbY5b0A763"]

所以我使用forEach方法對其進行了迭代,以獲取單個密鑰以檢查是否在用戶樹中找到了,但是結果是否為null?

但是當我記錄keys.forEach(key => console.log(key))我可以在一行中獲取每個鍵

firebase
      .database()
      .ref("users")
      .child(keys.forEach(key => key))
      .once("value")
      .then(users => {
             // let username = users.val().username;
             console.log(users.val());
             // Object.assign(users, { [Object.keys(users)]: username });
       });

編輯

這樣就可以獲取每個用戶名了,現在的新問題是我想將這些名稱保存到我擁有的其他對象中

users = {
 dtnMG3dVEQXL1TPct3awl927jax2: // the unique key
   -LmUSeyWtBPqcoN8l6fd: [{…}]
   -LmUgcbdzElxWpLkN-F9: [{…}]
    // here's i want to add somthing like thies
   -username : "userOne" //I got it from the Looping
 y5eAQppoEZRELsDL3hLbY5b0A763:
   -LmSTYlxa7bjy0Beazmy: [{…}]
   -LmUad3lvkPdTQDFo4Ds: [{…}]
   -LmUyDmGcEmYKOJnvEiA: [{…}]
    // here's i want to add somthing like thies
   -username : "userTwo" // I got it from the Looping
 }

.child(keys.forEach(key => key)) -這是您的問題。 forEach有效地一一返回所有數組值。 但是你把它與被調用一次 一個參數的函數里面。 因此,它將僅檢查數組中的第一個值,其余的將被轉儲,因此就像在1元素數組中查找一樣。

解決方案是在迭代執行數據庫調用:

keys.forEach( key => {
    firebase
      .database()
      .ref("users")
      .child(key)
      .once("value")
      .then(users => {
             // let username = users.val().username;
             console.log(users.val());
             // Object.assign(users, { [Object.keys(users)]: username });
       }});

編輯:

假設變量curUser擁有您要插入的用戶名,並且curKey是與該用戶名相關聯的密鑰,那么在完成編輯后要執行的操作就是: users[key]["username"] = curUser; 這將引用users對象中以curKey命名的屬性,並將在其中創建“用戶名”屬性並將值存儲在其中。

請注意,如果您在此鍵對象中已經具有“用戶名”屬性,它將被覆蓋。

**我假設“用戶”內部鍵屬性的數據結構是對象,即使您的代碼沒有真正顯示出來。

keys.forEach(key => key)

這將返回數組keys每個元素。 然后,您將這些元素傳遞給child 然而, child的功能預計只有一個參數。

嘗試這個:

for( let key of keys){

    firebase
      .database()
      .ref("users")
      .child(key)
      .once("value")
      .then(users => {
            // let username = users.val().username;
       console.log(users.val());
            // Object.assign(users, { [Object.keys(users)]: username });
      });

}

不支持:請勿在forEach循環中調用async函數。

暫無
暫無

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

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