首页 > 解决方案 > 如何分别从数组中获取项目

问题描述

我有一个包含唯一键的数组,这些键我想用它从firebase实时数据库中获取他的数据,这样的数组

["dtnMG3dVEQXL1TPct3awl927jax2", "y5eAQppoEZRELsDL3hLbY5b0A763"]

所以我使用forEach方法对其进行迭代以获取单个键以检查是否在用户树中找到但结果为空?

但是当我登录时,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
 }

标签: javascriptarraysreactjsfirebasefirebase-realtime-database

解决方案


.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;. 这将引用对象中以 curKey 命名的属性,并将在其中users创建一个“用户名”属性并将值存储在那里。

请注意,如果您在此键对象中已经有“用户名”属性,它将被覆盖。

** 我假设“用户”内的关键属性的数据结构是对象,即使您的代码并没有真正显示它。


推荐阅读