Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Firestore数组中按键/值删除项_Javascript_Arrays_Reactjs_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 从Firestore数组中按键/值删除项

Javascript 从Firestore数组中按键/值删除项,javascript,arrays,reactjs,firebase,google-cloud-firestore,Javascript,Arrays,Reactjs,Firebase,Google Cloud Firestore,我在Firestore中有一个数组,其结构如下: palettes 0: {date: 2019-05-01, name: "First Palette", palette: [array]} 1: {date: 2019-05-02, name: "Palette 2", palette: [array] 调色板数组中的每个项目都是一个调色板项目,其中包含日期、名称和数组中的调色板数据 在我的React应用程序中,我试图通过引用Firestore db中的名称值来删除它,但没

我在Firestore中有一个数组,其结构如下:

palettes
    0: {date: 2019-05-01, name: "First Palette", palette: [array]}
    1: {date: 2019-05-02, name: "Palette 2", palette: [array]
调色板
数组中的每个项目都是一个调色板项目,其中包含日期、名称和数组中的调色板数据

在我的React应用程序中,我试图通过引用Firestore db中的
名称
值来删除它,但没有任何运气

例如,如果我从单击事件传递了
paletteName
“Palette 2”,如何删除该字符串作为名称值的调色板

以下是我尝试过的:

一,

二,

三,

四,


这些都没有做到。我错过了什么

您将无法使用
FieldValue.arrayRemove
。这仅适用于作为数组的顶级字段。您也无法在一次操作中完成此操作

你必须

1) 将整个文档读入内存,
2) 按所需方式修改内存中的数组,

3) 然后将该字段更新回文档

谢谢@Doug的帮助

最后很容易。我已经在我的应用程序状态中有了对文档的引用,因此从那里开始,我所需要的就是:

const deletePalette = paletteName => {
    // currentUser was in my app state and contains the user `doc` data
    // so just grab the palettes
    const userPalettes = currentUser.palettes

    // filter the palettes array
    const newPalettes = userPalettes.filter(
        palette => palette.name !== paletteName
    )

    // update the doc with the filtered palettes
    var userRef = db.collection('users').doc(user.uid)
    userRef.update({
        palettes: newPalettes
    })

    // update my state to reload user data
    setPaletteRemoved(true)

}
const deletePalette = paletteName => {
    db.collection('users').doc(user.uid)
        .update({
            palettes: firebase.firestore.FieldValue.arrayRemove(paletteName)
        })
    // ...
}
const deletePalette = paletteName => {
    const ref = db.collection('users').doc(`${user.uid}/palettes/`)

    ref.update({
        [paletteName]: firebase.firestore.FieldValue.delete()
    })
    // ...
}
const deletePalette = paletteName => {
    db.collection('users').doc(user.uid)
    .update({
        palettes: palettes.filter(
            palette => palette.name !== paletteName
        )
    })
    // ...
}
const deletePalette = paletteName => {
    // currentUser was in my app state and contains the user `doc` data
    // so just grab the palettes
    const userPalettes = currentUser.palettes

    // filter the palettes array
    const newPalettes = userPalettes.filter(
        palette => palette.name !== paletteName
    )

    // update the doc with the filtered palettes
    var userRef = db.collection('users').doc(user.uid)
    userRef.update({
        palettes: newPalettes
    })

    // update my state to reload user data
    setPaletteRemoved(true)

}
Cart = (ID) => {
    const x = {
      pname:'masala',
      price:22,
      data:1596960784777
    }

    this.db.doc(`${ID}`).update({
      cart: firebase.firestore.FieldValue.arrayRemove(x)
    }).then(() => {
      console.log('posted')
    })
  }