javascript - 如何分别从数组中获取项目
问题描述
我有一个包含唯一键的数组,这些键我想用它从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
}
解决方案
.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
创建一个“用户名”属性并将值存储在那里。
请注意,如果您在此键对象中已经有“用户名”属性,它将被覆盖。
** 我假设“用户”内的关键属性的数据结构是对象,即使您的代码并没有真正显示它。
推荐阅读
- java - 将图片的路径存入数据库
- r - 从dataFrame到R中的分组Json
- javascript - 由于“找不到构建器的实现”,ng build 和 ng serve 无法正常工作
- javascript - 循环遍历 indexedDB 中的对象时无法检索对象属性
- android - 如何更新 ListView 条目并让用户继续并滚动 listview 值?
- amazon-web-services - 您可以在同一 cloudformation 脚本中将 Route53 资源记录设置为 EC2 实例的 IP 吗?
- android - 有没有办法不显示推荐的插件更新窗口?
- ruby-on-rails - 如何更新生产环境的记录?
- scala - 小猫 - 模棱两可的进口
- elasticsearch - 在 Kibana 上可视化静态日志文件