reactjs - For...in 循环在发送到 Firestore 时添加键而不是值
问题描述
我有一个对象,其中包含一些变量和一个数组。我正在尝试将数据添加到 Firebase。Firebase 不喜欢这个数组。我的解决方案是将数组转换为对象,并使用 For...in 循环和 Firestore 数组查询将对象值发送到 Firestore 中的数组。这几乎奏效了,但是由于某种原因,我的代码添加了键名而不是值,我做错了什么?
let projectId = Math.floor(Math.random() * 10000);
let docTitle = this.projectTitle.title;
this.pages.forEach((page) => {
let pageT = page.pageTitle;
let pageD = page.pageDesc;
let id = page.id;
let blocks = page.blocks;
db.collection(docTitle + projectId).doc(pageT).set({
page: {pageTitle:pageT, pageDesc: pageD, id:id }
})
.then(function() {
console.log("Document successfully written!");
})
.catch(function(error) {
console.error("Error writing document: ", error);
});
// Converts array into object and adds object values to an array in firestore
let newBlocks = Object.assign({}, blocks);
for(let block in newBlocks){
db.collection(docTitle + projectId).doc(pageT).update({
blocks: firebase.firestore.FieldValue.arrayUnion(block)
})
}
})
以下是有关更新数组的 Firestore 文档:https ://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array
解决方案
使用 for...of 迭代可迭代对象中的值,
改变
for(let block in newBlocks){
至
for(let block of newBlocks){
for...in 迭代对象键,因此 for...of 在您的情况下是正确的
推荐阅读
- javascript - 使用 html 和 css 创建树
- github - 创建自定义 GitHub 表情符号
- swift - 如何快速使用 char *c = "\x0D\x0A"
- python - matplotlib中的逗号是什么意思?- Python
- javascript - NodeJS 等待优先级 - 一个等待以错误的顺序在另一个之前运行(Express、SQLite3 db.all 和 db.run)
- zurb-foundation - JOINTSWP 如何在 JOINTWSP 中开启基础原型断点
- python-3.x - 如何将此 24615478158188 uid 代码转换为来自 ESP-RFID 的 f69a4e9e uid 代码?
- bash - Bash脚本将管道sed的输出保存到变量
- express - Express Handlebars - 向不同页面添加独特的样式表和脚本
- c# - 将 HashSet 列表高效转换为单个 HashSet