首页 > 解决方案 > 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

标签: reactjsfirebasegoogle-cloud-firestore

解决方案


使用 for...of 迭代可迭代对象中的值,

改变

for(let block in newBlocks){

 for(let block of newBlocks){

for...in 迭代对象键,因此 for...of 在您的情况下是正确的


推荐阅读