简体   繁体   中英

how to get items from array on respectively

I have an array contain unique keys, these keys I want to take it to get his Data from firebase real-time DB the array like this

["dtnMG3dVEQXL1TPct3awl927jax2", "y5eAQppoEZRELsDL3hLbY5b0A763"]

so I iterate it using forEach Method to get a single key to check if found in the users tree or not But the result is null?

But when I Log the keys.forEach(key => console.log(key)) I can Get every key in a single line

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 });
       });

Edit

So thats fine and get every single username, Now the new issues is i want to save these names to other object i have

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)) - This is your problem. This forEach effectively returns all your array values one by one. But you call it inside a function with one argument that gets called one time. So it will only check for the first value in your array and the rest will be dumped, so its like looking inside a 1-element array.

Solution is to perform the DB calls inside the iteration:

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 });
       }});

EDIT:

to do what you wanted after you edited, assuming the variable curUser holds the username you want to insert and curKey is the key associated to that username, just: users[key]["username"] = curUser; . This will reference the property which is named after curKey in the users object, and will create a "username" property in it and store the value there.

Notice that if you already have "username" property in this key object it will be overriden.

** I assumed the data structure of the key-properties inside "users" are objects even tho your code doen't really show it.

keys.forEach(key => key)

This return every element of the array keys . And you are passing these elements to the child function. However, child functions expects only one argument.

Try this:

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 });
      });

}

Side not: Do not call async function inside forEach loop.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM