更新 firestore 中的地图字段

Updating a map field in firestore

我是新手,几个月前才开始编码。我正在创建一个带有 expo 本地反应的应用程序,但我无法将地图字段更新到文档中。到目前为止,当我需要更新一个文件(例如一个名字)时,我正在做以下事情:

const updateData = async () => {
        await updateDoc(doc(db,"users",uid),{
            name:name, 
            age: age,
        })

问题是我现在有一个按以下方式存储数据的映射字段:

我设置应用程序的方式是,我有一个食物数组:

const [item, setItem] = useState([
        {Food: 'tomato', Calories: 20, Quantity: 1,},
        {Food: 'lettuce', Calories: 10, Quantity: 1,},
    ]);

我想将其存储到 firestore 文档中的地图字段中。

我以为我可以使用 for 循环,这样我就可以将数组元素的每个字段填充到映射中,但我似乎无法在 await 中使用循环。

在这种情况下,我可以使用类似的解决方法吗?

以红色突出显示的 for 循环:

        await updateDoc(doc(db,"user",uid),{
        for (let i = 0; i < item.length; i++) {
            
        }

    },
    { merge: true })

要将数组转换为映射,请尝试使用 reduce(),如下所示:

const updatedMap = item.reduce((a, b) => {
  a[b.Food] = b;
  return a; 
}, {})

await updateDoc(doc(db, "user", uid), { food: updatedMap })

这将使用食物名称作为食物地图中的键,并将对象测试作为值。